PHP object cloning clone keyword and __clone() method
clone keyword is used to clone an identical object, and __clone() method is used to override the original properties and methods.
Object cloning
Sometimes we need to use two or more identical objects in a project. If we use the new keyword to re-create the object and then assign the same attributes, it will be cumbersome and error-prone. PHP provides an object cloning function, which can completely clone an identical object based on an object. Moreover, after cloning, the two objects will not interfere with each other.
Use keyword clone to clone an object. Syntax:
$object2 = clone $object;
Example:
<?php class Person { private $name; private $age; function __construct($name, $age) { $this->name=$name; $this->age=$age; } function say() { echo "我的名字叫:".$this->name."<br />"; echo "我的年龄是:".$this->age; } } $p1 = new Person("张三", 20); $p2 = clone $p1; $p2->say(); ?>
Run the example, output:
My name is: Zhang San
My age is: 20
__clone()
If you want to To change the contents of the original object after cloning, you need to add a special __clone() method to the class to override the original attributes and methods. The __clone() method is only automatically called when the object is cloned.
Example:
<?php class Person { private $name; private $age; function __construct($name, $age) { $this->name = $name; $this->age = $age; } function say() { echo "我的名字叫:".$this->name; echo " 我的年龄是:".$this->age."<br />"; } function __clone() { $this->name = "我是假的".$this->name; $this->age = 30; } } $p1 = new Person("张三", 20); $p1->say(); $p2 = clone $p1; $p2->say(); ?>
Run the example, output:
My name is: Zhang San My age is: 20
My name is: I am the fake Zhang San My age is: 30