Background
Up to now there is no way a user can decide what copy constructor to run when an object
is duplicated. At present during duplication the Zend Engine does a “bitwise” copy
making an identical replica of all the objects’ properties.
Need
Creating a copy of an object with fully replicated properties is not always the wanted
behavior. A good example of the need for copy constructors, is if you have an object
which represents a GTK window and the object holds the resource of this GTK window,
when you create a duplicate you might want to create a new window with the same
properties and have the new object hold the resource of the new window.
Another example is if your object holds a reference to another object which it uses and
when you replicate the parent object you want to create a new instance of this other
object so that the replica has its own separate copy.
Overview
When the developer asks to create a new copy of an object, the Zend Engine will check if
a __clone() method has been defined or not. If not, it will call a default __clone() which
will copy all of the object’s properties. If a __clone() method is defined, then it will be
responsible to set the necessary properties in the created object. For convenience, the
engine will supply a function that imports all of the properties from the source object, so
that they can start with a by-value replica of the source object, and only override
properties that need to be changed.
Functionality
The suggested syntax for creating a copy of an object is:
$copy_of_object = $object->__clone();
Compatibility notes
If by chance an object from an older script already has a method __clone() defined then it
might be called not in a way the developer had planned. This should be quite easy to
detect and work around.
Dependencies of feature
This feature becomes mainly interesting with the new object model although it could
possibly be implemented in the old one too.