Object Oriented Model - a summary of changes from PHP4 to PHP5
Archive - Originally posted on "The Horse's Mouth" - 2007-04-18 07:34:26 - Graham EllisWhat are the differences between the Object Oriented model in PHP5 and PHP4?
Firstly (and the reason the release number jumped) is that assignments copy references in PHP5 (which is regarded as correct OO behaviour) but they duplicate or clone the object in PHP4. This may sound a bit obtuse, but:
* if you duplicate an object and then change one of the copies, you do NOT effect the data refered to by the other name (PHP4 behaviour)
* if you copy by reference (PHP5 behaviour, in effect giving the object a second name) and then change one of the "copies", you effect both as there one and the same.
In effect, it's the difference between letting someone share a piece of paper with you and both writing on it (PHP5), and taking a photocopy to give to someone then each writing on your own sheet (PHP4).
The second major difference is that PHP5 lets you use a whole lot of RESTRICTING keywords in your definitions of classes and methods. You can declare that functions and member variables are:
* private - i.e. only visible inside the class
* protected - i.e. only visible in the class or its subclasses
* final - i.e. cannot be overridden by / in subclasses
And you can declare classes to be
* abstract - i.e. MUST be subclassed with specific extra methods
* to implement an interface - i.e. MUST define certain methods
None of these new keywords adds new capabilities, apart from the capability of restricting, so why are they there? To allow the designer / author of a class to limit the externally available elements leading to a crisper, easier to documuent and maintain API (application programmer interface), in the long term interest of maintainable PHP code in substantial applications. If you want a member to be public, you can still use the var keyword of PHP4, although you're really encouraged to use the public keyword that means the same thing and, you'll note, does NOT restrict.
Thirdly, in PHP5 you can name your constructor method __construct rather than have it as a function with the same name as the class, and you can use a parent:: notation to call up methods in the base class is you wish to. In this way, you no longer need to code the name of the class, nor its relationship to other classes, internally - once again making for easier code modification and use later. PHP5 also has a __destruct method which is run to clean away objects when you're finished with them.
Other additions at PHP 5 to the OO model include
* A static keyword to let you define class / static / unbound members
* An autolaod method called if a class is missing at run time
* An __clone method if you really want to duplicate an object
* An __toString method that lets you define what's printed out when you print or echo an object variable
* Exceptions, Reflection classes, constants, interceptors ....