<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>PHPDeveloper.org</title>
    <link>http://www.phpdeveloper.org</link>
    <description>Up-to-the Minute PHP News, views and community</description>
    <language>en-us</language>
    <pubDate>Thu, 23 May 2013 23:56:15 -0500</pubDate>
    <ttl>30</ttl>
    <item>
      <title><![CDATA[Joshua Thijssen: PHP5.5: Try/Catch/Finally]]></title>
      <guid>http://www.phpdeveloper.org/news/19169</guid>
      <link>http://www.phpdeveloper.org/news/19169</link>
      <description><![CDATA[<p>
<i>Joshua Thjissen</i> has a new post to his site today about a feature that's been introduced in the upcoming PHP 5.5 release of the language - the addition of "finally" to try/catch exception handling. He gets into it <a href="http://www.adayinthelifeof.nl/2013/02/12/php5-5-trycatchfinally/">a bit more technically</a> than just the "introductory" level, discussing parent/child exception handling and using returns.
</p>
<blockquote>
Exception handling is available in PHP since version 5.  It allows you to have a more fine-grained control over code when things go wrong ie, when exceptions occur. But since PHP 5.5, exception handling has finally evolved into what it should have been from the beginning: the "finally" part has been implemented.
</blockquote>
<p>
He includes a basic example showing how a certain part is always executed, regardless of if the exception is thrown or not. He also shows how a "chained catch" would work to catch multiple kinds of exceptions and when the "finally" is run as it relates to the "trickle down" handling of exceptions. He then gets a little more complex and introduces "return" into the mix. Of special note, even if you return, the "finally" will still get called.
</p>]]></description>
      <pubDate>Tue, 12 Feb 2013 10:03:23 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Mike Purcell's Blog: PHP - Reflection Class - Determine Parent Method Signature]]></title>
      <guid>http://www.phpdeveloper.org/news/18185</guid>
      <link>http://www.phpdeveloper.org/news/18185</link>
      <description><![CDATA[<p>
In <a href="http://melikedev.com/2012/07/03/php-reflection-class-determine-parent-method-signature/">this recent post</a> to his blog <i>Mike Purcell</i> shares a method he found to discover the parameters required by a method in a class' parent via <a href="http://php.net/reflection">reflection</a>.
</p>
<blockquote>
According to <a href="http://us.php.net/manual/en/memcached.get.php">PHP docs</a> regarding the Memcached::get() method, there are three arguments which which must be added to my extended signature, which I added, but kept getting "...should be compatible with that of Memcached::get()" errors. I tried looking for the method signature via source code but didn't glean anything useful from the <a href="https://github.com/php-memcached-dev/php-memcached">PECL documentation</a>, so I turned to <a href="http://us3.php.net/reflectionclass">PHP's RelectionClass</a>.
</blockquote>
<p>
He includes a quick snippet of code showing how the check works and the handy output it produces - a set containing the parameter name, if it's require or optional and it's definition.
</p>]]></description>
      <pubDate>Thu, 05 Jul 2012 10:12:04 -0500</pubDate>
    </item>
    <item>
      <title><![CDATA[Content With Style: buggy behaviour of parent:: in PHP 5.3.3]]></title>
      <guid>http://www.phpdeveloper.org/news/15600</guid>
      <link>http://www.phpdeveloper.org/news/15600</link>
      <description><![CDATA[<p>
On the Content with Style blog today they take a look at some <a href="http://www.contentwithstyle.co.uk/content/behaviour-of-parent-in-php-533">buggy functionality with parent::</a> they've found in the latest version of PHP, 5.3.3.
</p>
<blockquote>
So, this app I hadn't been looking at in a few months did not work at all. I traced the bug down to a method that itself called a parent method. The parent only contains __call and __callStatic methods, and for some reason __callStatic was called, although the class it was called from was an object instance.
</blockquote>
<p>
After using some sample code from the PHP manual, they spotted how things truly worked - the call is always sent to __callStatic when called from the extending class but not when called directly. Apparently they <a href="http://www.serverphorums.com/read.php?7,220473">aren't the only ones</a> that noticed <a href="http://bugs.php.net/51176">the bug</a> but noted that it was <a href="http://bugs.php.net/52713">removed in PHP 5.3.4</a> to fix the issue.
</p>]]></description>
      <pubDate>Mon, 20 Dec 2010 09:43:56 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Re-Cycled Air Blog: PHP Dark Arts: Daemonizing a Process]]></title>
      <guid>http://www.phpdeveloper.org/news/15356</guid>
      <link>http://www.phpdeveloper.org/news/15356</link>
      <description><![CDATA[<p>
On the Re-Cycled Air blog <i>Jack Slingerland</i> has posted another in his "Dark Arts" series looking at some of the lesser used PHP features. This time he focuses in on <a href="http://www.re-cycledair.com/php-dark-arts-daemonizing-a-process">daemonizing a process</a> by forking it off into the background.
</p>
<blockquote>
One of the many things you don't often do with PHP (actually, I'm not sure you do this much with any language) is daemonize a process.  A daemon is program that runs in the background (read more <a href="http://en.wikipedia.org/wiki/Daemon_%28computer_software%29">here</a>).  On Unix systems, processes are usually created by forking the init process and then manipulating the process to your liking.  To create a daemon though, you need to get the init process to adopt your process.  To do that, as soon as you fork the parent process, you kill the parent.  Since you child process is parent-less, the init process generally adopts it.  Once that happens, your process has been daemonized.
</blockquote>
<p>
He uses the <a href="http://php.net/pcntl_fork">pcntl_fork</a> function to spawn off the child process, detach it from a terminal window, create a ".pid" file so the system knows about it and then, of course, have the child script do something.
</p>]]></description>
      <pubDate>Fri, 29 Oct 2010 11:02:36 -0500</pubDate>
    </item>
    <item>
      <title><![CDATA[AskAboutPHP.com: CodeIgniter: Extending the native 'Model' and make it your own.]]></title>
      <guid>http://www.phpdeveloper.org/news/11394</guid>
      <link>http://www.phpdeveloper.org/news/11394</link>
      <description><![CDATA[<p>
The AskAboutPHP.com blog has <A href="http://www.askaboutphp.com/beginners/50/codeigniter-extending-the-native-model-and-make-it-your-own.html">posted a helpful new tutorial</a> for those using <a href="http://www.codeigniter.org">CodeIgniter</a> out there - how to extend the native Model class to bend it to your will.
</p>
<blockquote>
I'm in the process of creating models for my CI project, and realized that certain functions within the models were getting repetitive. Using CI's ability to create my own custom libraries, I was able to create my own custom 'Model' which extends from the core 'Model' object. How this simple architecture has cleaned up my code is simply remarkable.
</blockquote>
<p>
Rather than overwriting the main Model.php file with some of your own changes, he suggests creating a new library, a "parent model" that can be extended instead to provide some common functions that all of your application's models might need. For something a bit more complex, he also points to <A href="http://www.phpfour.com/blog/2008/07/12/extended-model-for-codeigniter/">this library</a> that extends the models to give it CakePHP-like functionality.
</p>]]></description>
      <pubDate>Wed, 12 Nov 2008 09:31:24 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Jani Hartikainen's Blog: Understanding Doctrine's NestedSet feature]]></title>
      <guid>http://www.phpdeveloper.org/news/10943</guid>
      <link>http://www.phpdeveloper.org/news/10943</link>
      <description><![CDATA[<p>
On his CodeUtopia blog <i>Jani Hartikainen</i> gives an <a href="http://codeutopia.net/blog/2008/08/30/understanding-doctrines-nestedset-feature/">inside look</a> at a feature of Doctrine, nested sets.
</p>
<blockquote>
The Doctrine library comes with a feature called nested set, which makes saving trees in a database easy. However, it's quite easy to accidentally cause a lot of extra unneeded queries if not being careful. Here are some pointers to keep in mind while working with the nested set, and some example queries to make understanding it easier.
</blockquote>
<p>
He gives an example, showing how to get rows from the database - parent and child - and some optimization tips to keep things light. There's also some pros and cons included for doing it either way (the standard fetching or using the more optimized versions).
</p>]]></description>
      <pubDate>Tue, 02 Sep 2008 10:29:56 -0500</pubDate>
    </item>
    <item>
      <title><![CDATA[Daniel Cousineau's Blog: Displaying N-Deep Trees (Remember Your Algorithms Course?)]]></title>
      <guid>http://www.phpdeveloper.org/news/10784</guid>
      <link>http://www.phpdeveloper.org/news/10784</link>
      <description><![CDATA[<p>
On his Tower of Power blog <i>Daniel Cousineau</i> has <a href="http://www.toosweettobesour.com/2008/08/05/displaying-n-deep-trees-remember-your-algorithms-course/">written up a look</a> at using a more detailed categorization method than just a parent/child relationship on your data - <a href="http://en.wikipedia.org/wiki/Tree_traversal">Tree Traversals</a>.
</p>
<blockquote>
If the software calls for only 2 levels of categorization (Parent and Child only), a simple nested for loop will suffice. However, software requirements change and you'll soon find yourself up shit creek without a paddle if you need to support 3 or 4 levels of nesting. [...] To those who's training is less formal (most web developers I meet have practical training, not formal), I'll help you out: <a href="http://en.wikipedia.org/wiki/Tree_traversal">Tree Traversals</a> (or if you are completely lost, <a href="http://en.wikipedia.org/wiki/Recursion">Recursion</a>).
</blockquote>
<p>
He creates a recursive function that, when passed in a category set with different types in it, can handle each of them and then calls itself again with the new child data. His sample code creates url out of a set of categories.
</p>]]></description>
      <pubDate>Thu, 07 Aug 2008 12:03:23 -0500</pubDate>
    </item>
    <item>
      <title><![CDATA[Mike Lively's Blog: Late Static Binding (LSB) forward_static_call()]]></title>
      <guid>http://www.phpdeveloper.org/news/9939</guid>
      <link>http://www.phpdeveloper.org/news/9939</link>
      <description><![CDATA[<p>
On his blog, <i>Mike Lively</i> has <a href="http://www.ds-o.com/archives/69-Late-Static-Binding-LSB-forward_static_call.html">posted a look</a> at some of the work he's been doing on patches for the late static binding functionality to be included in PHP, including an example of the updates in action.
</p>
<blockquote>
This weekend I wrapped up a few small tests and sent the patch in and it was subsequently pushed to <a href="http://www.ds-o.com/exit.php?url_id=193&entry_id=69">php 5.3 and php 6.0</a>. Now, this is not at all the way I wanted things to work, in all honesty I think the patch is pretty hokey but unfortunately nobody really spoke up in support of the changes I wanted to make to parent:: in regards to LSB.
</blockquote>
<p>
His example shows how to override a static method and push that new method's execution to the parent class (in two ways - safe using forward_static_call and the not so safe calling itself with a parent:: override).
</p>]]></description>
      <pubDate>Wed, 09 Apr 2008 11:24:19 -0500</pubDate>
    </item>
    <item>
      <title><![CDATA[Arnold Daniels' Blog: A dark corner of PHP: class casting]]></title>
      <guid>http://www.phpdeveloper.org/news/9670</guid>
      <link>http://www.phpdeveloper.org/news/9670</link>
      <description><![CDATA[<p>
In <a href="http://blog.adaniels.nl/articles/a-dark-corner-of-php-class-casting/">this blog entry</a> <i>Arnold Daniels</i> talks about an issue he had in the past (needing a bit more functionality than the <a href="http://pear.php.net/package/DB">PEAR DB library</a> could offer) and how he ended up solving it with what he calls a "dark corner" of PHP - class casting.
</p>
<blockquote>
PHP has a function serialize, which can create a hash from any type of variable, scalars, array, but objects as well. Using the unserialize function, PHP can recreate the variable from the serialized hashed. If we look at how an object is serialized, we see only the properties and the class name are stored.
</blockquote>
<p>
<a href="http://blog.adaniels.nl/articles/a-dark-corner-of-php-class-casting/">His method</a> allows for class manipulation via changes to the serialized class information (like changing the value of the name parameter). His "casttoclass()" function makes changing this value simple.
</p>]]></description>
      <pubDate>Wed, 20 Feb 2008 12:08:00 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Mike Lively's Blog: Late Static Binding - Changes to parent]]></title>
      <guid>http://www.phpdeveloper.org/news/9112</guid>
      <link>http://www.phpdeveloper.org/news/9112</link>
      <description><![CDATA[<p>
<i>Mike Lively</i> has <a href="http://www.ds-o.com/archives/68-Late-Static-Binding-Changes-to-parent.html">shared some of his thoughts</a> on the late static binding functionality that will be in the upcoming PHP 5.3 - specifically the relationships of parents and children it has.
</p>
<blockquote>
I won't rehash all of the arguments as you can quite easily find out my full thoughts by previous posts and on that mailing list thread. To put it simply I feel that somehow there needs to be a way to call methods in a parent class without losing the ability to reference back to the original called static.
</blockquote>
<p>
He gives an example of what he's talking about (code) and, to help further his cause he's <a href="http://www.ds-o.com/exit.php?url_id=185&entry_id=68">created</a> <a href="http://www.ds-o.com/exit.php?url_id=186&entry_id=68">three</a> <a href="http://www.ds-o.com/exit.php?url_id=187&entry_id=68">patches</a> to make it work how he'd like.
</p>]]></description>
      <pubDate>Mon, 26 Nov 2007 09:37:00 -0600</pubDate>
    </item>
  </channel>
</rss>
