PHP 5 Tutorial – __clone Magic Method
In PHP 5 when you assign one object to another object creates a reference copy and does not create duplicate copy. This would create a big mess as all the object will share the same memory defined for the object. To counter this PHP 5 has introduced clone method which creates an duplicate copy of the object. __clone magic method automatically get called whenever you call clone methods in PHP 5.
Example – Without Object Cloning
< ? class Animal { public $name; public $legs; function setName($name) { $this->name = $name; } function setLegs($legs) { $this->legs = $legs; } } $tiger = new Animal(); $tiger->name = "Tiger"; $tiger->legs = 4; $kangaroo = $tiger; $kangaroo->name = "Kangaroo"; $kangaroo->legs = 2; echo $tiger->name."---".$tiger->legs; echo "<br />".$kangaroo->name."---".$kangaroo->legs; ?>
Output:
Kangaroo—2
Kangaroo—2
Explanation:
- Here i have created an $tiger object of Animal class
- Created another variable $kangaroo and assigned $tiger to $kangaroo
- After echo it print the details entered last because both the variables are referring to the same memory location
Example – Above Example With clone Function
< ? class Animal { public $name ; public $legs; function setName($name) { $this->name = $name; } function setLegs($legs) { $this->legs = $legs; } function __clone() { echo "<br />Object Cloning in Progress"; } } $tiger = new Animal(); $tiger->name = "Tiger"; $tiger->legs = 4; $kangaroo = clone $tiger; $kangaroo->name = "Kangaroo"; $kangaroo->legs = 2; echo "<br />".$tiger->name."---".$tiger->legs; echo "<br />".$kangaroo->name."---".$kangaroo->legs; ?>
Output:
Object Cloning in Progress
Tiger—4
Kangaroo—2
Explanation:
- Here i have created an $tiger object of Animal class
- Created another variable $kangaroo having clone of $tiger. This calls the __clone magic method
- After echo it print the details entered by individual object as both of them are referring to separate object and memory location
The above technique of cloning discussed is called shallow copy. There are other techniques called Deep Copy wherein you create duplicate copy of objects referring to other objects etc.
















very nice tutorial and explanation. i helps us a lot.
Thanks very much
Gurpreet
Cam on da chia se, nhung ngu vai lon ai lai di dich ca code sang tieng viet.