Thursday, May 12, 2011

Object Cloning

more info.. http://evergreenphp.blogspot.com

Object Cloning
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.
An object copy is created by using the clone keyword (which calls the object's __clone() method if
possible). An object's __clone() method cannot be called directly.
$copy_of_object = clone $object;
When an object is cloned, PHP 5 will perform a shallow copy of all of the object's properties. Any
properties that are references to other variables, will remain references.
Once the cloning is complete, if a __clone() method is defined, then the newly created object's
__clone() method will be called, to allow any necessary properties that need to be changed.
instance = ++self::$instances;
}public function__clone() {
$this->instance = ++self::$instances;
}
}classMyCloneable
{
public$object1;
public$object2;
function__clone()
{
// Force a copy of this->object, otherwise
// it will point to same object.
$this->object1 = clone $this->object1;
}
}$obj = new MyCloneable();
$obj->object1 = new SubObject();
$obj->object2 = new SubObject();
$obj2 = clone $obj;
print("Original Object:\n");
print_r($obj);
print("Cloned Object:\n");
print_r($obj2);
?>

No comments: