If you want to copy an object, how do you do it?
Typically, you can just assign the object to a new variable - in PHP, for example:
$demo = new thing("Stick of Celery");
$showme = $demo;
but you need to be careful, because that assigns a second name to the same object. If you then run a method on the object by one name, you'll alter the object as it would be under the second name too. Let me show you:
$showme->set("and zalt");
print $demo->get();
print $showme->get();
and I get
Stick of Celery and zalt
Stick of Celery and zalt
In practise, this type of copying is usually what you want to do and in scenarios where you don't need to duplicate the internals of the object, it's also very efficient. However, there are times where you want to
duplicate the contents of the object so you end up with two identical objects, and you can do this using the
clone function that's provided in PHP. Here's how you call it:
$yummy = clone ($demo);
and when I then change one of my objects:
$yummy->set("and vinegar");
print $demo->get();
print $yummy->get();
I get:
Stick of Celery and chips
Stick of Celery and chips and vinegar
in other words I now have
two different objects.
The full source code of this example is
[here] on our web site, and the topic is covered in our
Obejct Oriented Programming in PHP course.
Beware that in PHP 4 - now an old version of PHP that's becoming quite rare - the assignment of an obeject worked just like a clone. This change (which broke a few programs) makes the current (PHP5) version more efficient and also 'correct' from a computer scientist's viewpoint. It's also the original reason for the version number change from "4" to "5". (written 2012-08-18, updated 2012-08-19)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
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)
[2172] PHP4 v PHP5 - Object Model Difference - (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)
[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
Good cause giving - getting the charity beggars off the streetRooms ready for guests - each time, every time, thanks to good system designRelax at Well House Manor - gardens, fountain, hotelCopying, duplicating, cloning an object in PHPSpraying data from one incoming to series of outgoing files in PerlGuest review - Well House Manor, MelkshamEvening behind Melksham SpaIn the garden at Well House Manor