
In PHP, there was a major change in the object model between version 4 and version 5. This code here - incredibly - runs differently on the two versions and what happens when you assign an object to another variable has changed.

In PHP 4, the object being assigned is duplicated, so that if you change the
original object after doing the assignment, then look up a property in the
copy, you'll be given the value that
you started with

In PHP 5, the new variable is just an extra name (an alias, if you like) for the original variable, so that if you change the
original object after doing the assignment, in reality you're changing both. So that when you look up a property in the
copy, you'll be given the value that
you have just set in the original
This (and other entries this morning) are taken from the board examples I wrote during last Friday's
Object Oriented Programming in PHP course. Each day during training, I'll draw dozens of diagrams to help delegates understand what's going on, and when asked I'm happy to document and publish some of them here. Bookings on our public courses are open - in other words, we'll accept bookings and welcome delegates who want to learn what we teach from any company or organisation, contractors, and private individuals. The prerequisites?
• A desire to learn
• A good understanding of the language in which the course is presented
• For advanced courses - enough technical background / prior knowledge to be able to gain from the course (and to not hold up other delegates)
There's a full list of our public courses for the rest of the year at
http://www.wellho.net/course/index.html - we have beginner and advanced course in PHP ... and also Linux, Java, Perl, Python, MySQL, Lua, C, Tcl, C++ and Ruby.
(written 2009-05-11, updated 2009-05-12)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
S159 - MySQL 5 and PHP 5 [104] mysql_connect or mysql_pconnect in PHP? - (2004-10-30)
[494] MySQL - a score of things to remember - (2005-11-12)
[515] MySQL - an FAQ - (2005-12-03)
[1131] MySQL - Password security (authentication protocol) - (2007-04-02)
[1417] What software version do we teach? - (2007-10-31)
[1455] Connecting to MySQL 5 from PHP on Mac OSX Leopard - (2007-12-03)
[1754] Upgrade from PHP 4 to PHP 5 - the TRY issue - (2008-08-15)
[1766] Diagrams to show you how - Tomcat, Java, PHP - (2008-08-22)
[3455] MySQL, MySQLi, PDO or something else - how best to talk to databases from PHP - (2011-09-24)
H108 - Objects in PHP [67] Object Oriented Programming in PHP - (2004-09-29)
[124] PHP v Java - (2004-11-20)
[205] PHP5 lets you say no - (2005-02-07)
[343] Should I use structured or object oriented? - (2005-06-10)
[421] Don't repeat code - use loops or functions - (2005-08-21)
[485] North, Norther and Northest - PHP 5 Objects - (2005-11-04)
[656] Think about your design even if you don't use full UML - (2006-03-24)
[720] Planning a hotel refurb - an example of a Gant chart in PHP - (2006-05-14)
[836] Build on what you already have with OO - (2006-08-17)
[1027] Cue the music, I'm happy. - (2007-01-09)
[1153] Object Oriented Model - a summary of changes from PHP4 to PHP5 - (2007-04-18)
[1217] What are factory and singleton classes? - (2007-06-04)
[1535] OO PHP demonstration - comparing objects and more - (2008-02-08)
[1682] Accounts in PHP - an OO demo - (2008-06-19)
[1819] Calling base class constructors - (2008-10-03)
[1820] Sorting objects in PHP - (2008-10-04)
[1925] Introduction to Object Oriented Programming - (2008-12-06)
[2160] PHP - getclass v instanceof - (2009-05-07)
[2169] When should I use OO techniques? - (2009-05-11)
[2171] Cleaning up redundant objects - (2009-05-11)
[2380] Object Oriented programming - a practical design example - (2009-08-27)
[2434] Abstract classes, Interfaces, PHP and Java - (2009-10-03)
[2435] Serialization - storing and reloading objects - (2009-10-04)
[2632] Shipping a test harness with your class in PHP - (2010-02-12)
[2641] Object Oriented Programming in PHP - (2010-02-19)
[2680] Static class members in PHP - a documented example - (2010-03-16)
[2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
[2741] What is a factory? - (2010-04-26)
[2774] PHP - Object Oriented Design in use - (2010-05-21)
[2921] Does copying a variable duplicate the contents? - (2010-08-14)
[2922] Getting the OO design write - with PHP a example - (2010-08-14)
[3142] Private and Public - and things between - (2011-01-22)
[3210] Catchable fatal error in PHP ... How to catch, and alternative solutions such as JSON - (2011-03-22)
[3211] Computer Graphics in PHP - World (incoming data) to Pixel (screen) conversion - (2011-03-24)
[3607] Designing your application - using UML techniques - (2012-02-11)
[3608] Design Patterns - what are they? Why use them? - (2012-02-12)
[3609] How do classes relate to each other? Associated Classes - (2012-02-12)
[3840] Autoload in PHP - (2012-08-17)
[3841] Copying, duplicating, cloning an object in PHP - (2012-08-18)
[3843] Caching Design Patterns - (2012-08-20)
[3953] Objects in PHP - Revision - (2012-12-16)
[4057] stdClass in PHP - using an object rather than an associative array - (2013-04-02)
[4073] Learning about Object Orientation in PHP - a new set of examples - (2013-04-28)
[4356] Object factories in C++, Python, PHP and Perl - (2014-12-19)
[4366] Changing what operators do on objects - a comparison across different programming languages - (2014-12-26)
[4626] Singleton design pattern - examples and uses - (2016-01-20)
[4627] Caching results in an object for efficiency - avoiding re-calculation - (2016-01-20)
[4628] Associative objects - one object within another. - (2016-01-20)
Some other Articles
Balloon Journey in WiltshireMelksham in picturesApplication design in PHP - multiple step processesBasic OO principlesPHP4 v PHP5 - Object Model DifferenceDesigning a heirarcy of classes - getting inheritance rightIn honour of the photograph, I present ... a walk from Reybridge to LacockWatching the tele