What 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 ....
(written 2007-04-18 07:34:26)
Associated topics are indexed under
H108 - Objects in PHP [2680] Static class members in PHP - a documented example - (2010-03-16)
[2641] Object Oriented Programming in PHP - (2010-02-19)
[2632] Shipping a test harness with your class in PHP - (2010-02-12)
[2435] Serialization - storing and reloading objects - (2009-10-04)
[2434] Abstract classes, Interfaces, PHP and Java - (2009-10-03)
[2380] Object Oriented programming - a practical design example - (2009-08-27)
[2172] PHP4 v PHP5 - Object Model Difference - (2009-05-11)
[2171] Cleaning up redundant objects - (2009-05-11)
[2169] When should I use OO techniques? - (2009-05-11)
[2160] PHP - getclass v instanceof - (2009-05-07)
[1925] Introduction to Object Oriented Programming - (2008-12-06)
[1820] Sorting objects in PHP - (2008-10-04)
[1819] Calling base class constructors - (2008-10-03)
[1682] Accounts in PHP - an OO demo - (2008-06-19)
[1535] OO PHP demonstration - comparing objects and more - (2008-02-08)
[1217] What are factory and singleton classes? - (2007-06-04)
[1027] Cue the music, I'm happy. - (2007-01-09)
[836] Build on what you already have with OO - (2006-08-17)
[720] Planning a hotel refurb - an example of a Gant chart in PHP - (2006-05-14)
[656] Think about your design even if you don't use full UML - (2006-03-24)
[485] North, Norther and Northest - PHP 5 Objects - (2005-11-04)
[421] Don't repeat code - use loops or functions - (2005-08-21)
[343] Should I use structured or object oriented? - (2005-06-10)
[205] PHP5 lets you say no - (2005-02-07)
[124] PHP v Java - (2004-11-20)
[67] Object Oriented Programming in PHP - (2004-09-29)
Some other Articles
Speed Networking - a great evening and how we arranged itTwo by One by WiltshirePointers in CAs I came back from TescoObject Oriented Model - a summary of changes from PHP4 to PHP5Course, right place, right timeGordon Dodge, R.I.P.Helsinki - what comes naturallyTurning objects into something you can store - Pickling (Python)Python decorators - wrapping a method call in extra code