PHP 5.4 was finalized this month and is the first major update to PHP since 2009. This version has enhanced the language, including supporting Traits and removing some controversial features.
Like Java and .NET, PHP uses a single inheritance model. Although this model is sufficient for most use case scenarios, sometimes users also need to place some common boilerplate code in other unrelated classes. (.NET's Dispose method is a good example of this type of boiler-plate code.) To solve this problem, PHP5.4 introduced Traits.
Traits is a collection of solutions that does not belong to any actual class. Users cannot create Trait instances or directly call methods in Traits. Instead, users must merge Traits into actual classes to use them. In terms of priority, Trait methods will override inherited methods with the same name, and methods with the same name in the current merged class will override Trait methods.
Traits have the same priority, so adding two Traits with overlapping method names to the same class is a mistake by default. Of course, this error can be avoided by manually resolving conflicts using the "insteadof" and "as" operators. In addition, the "as" operator can also be used to change the visibility of a Trait.
The methods in Traits can be abstract methods to support partial generalization of Traits; at the same time, Traits can also expose static variables, and each class containing Traits will have a copy of the variable. In addition, properties that have been declared in Traits cannot be declared in the containing class.
Other syntax improvements include:
PHP 5.4 provides its own web server that you can start from the command line. This web server is designed to aid development only; it does not replace your production web server.
The much-maligned Register Globals have been completely removed from PHP. The feature has been known for its frequent security breaches for a decade. In 2002 this feature was set to be off by default. PHP 5.3, released in 2009, marked this feature as "deprecated", and presumably most developers have stopped using it since then.
Another unpleasant feature that was removed from PHP was Magic Quotes. Magic Quotes are intended to automatically escape strings in an attempt to avoid SQL injection attacks. But because the way string escaping is used is often context-specific, it can cause more problems than it attempts to solve. This feature, like Register Globals, was also marked "deprecated" in 2009.
The break and continue statements in PHP can be followed by a parameter to specify the number of loop levels to jump out of. If no parameters are specified, it will break out of the innermost loop just like VB, C# or Java. Before PHP 5.4, developers could pass a variable to the break statement, but now only constants can be passed.
PHP allows parameters to be passed by reference. In earlier versions, you could indicate that variables were passed by reference by adding decorations to the call site. In PHP 5.4, this option has been removed. In contrast, modern PHP programming requires only specifying pass-by-reference when the function is declared. Unlike C#, you don't need to specify pass-by-reference at both the declaration and the call site.
View the original English text: http://www.infoq.com/news/2012/03/PHP-5.4