PHP as a programming language has always been criticised. Because it’s scripting language, because it’s fundamentally a procedural language with thousand of unrelated functions, but mostly because it’s support for Object Orientated Programming was primitive at best. PHP4 didn’t even support the public,private and protected keywords for methods and fields.
However, until recently, most of the major Open Source web applications such as WordPress and Drupal would run happily on PHP4. This meant that web hosts had little incentive to upgrade to PHP5, which meant that developers often didn’t take advantage of the new language facilities available in PHP5.
The good news is that WordPress 3.2, due early next year, will only support PHP5.2 and later. The next iteration of Drupal and Joomla are also going to require PHP5.2. This will finally force web hosts to enable PHP5 support out of the box, and hopefully will speed up the development of PHP as a language, as more developers start to take advantage of the PHP5 specific features such as PDO, the new XML objects and better Object support.
It’s just a shame that they haven’t jumped straight to requiring PHP5.3, which adds a number of very useful programming constructs, such as closures and crucially late static binding. Building complex extended classes is a right pain in the arse in PHP5.2, as you often end up having to redefine methods or fields in child classes, rather than just referring to methods defined in the parent class. Brandon Savage has a nice little primer on late static binding, and I’ve suffered myself with this issue myself when playing with Zend Framework.