PHP克隆对象
时间:2018-11-15 15:13:52 来源:igfitidea点击:
在本教程中,我们将学习如何使用浅复制复制对象,以及使用PHP clone object进行深复制。
让我们开始创建一个简单的Person类来进行演示:
class Person{
private $sn;
private $firstName;
private $lastName;
public function __construct($sn,$firstName,$lastName){
$this->sn = $sn;
$this->firstName = $firstName;
$this->lastName = $lastName;
}
public function __destruct(){
echo sprintf("编号# %s 的对象已注销.",
$this->sn);
}
public function __toString(){
return sprintf("编号: %s, 名称: %s, %s",
$this->sn,
$this->lastName,
$this->firstName);
}
}
现在,我们可以创建一些Person对象:
$p1 = new Person('1234567', 'Alice', 'road');
echo $p1;
$p2 = new Person('3456789','the','itroad');
echo $p2;
我们创建了两个对象:$p1和$p2。$p1和$p2都是指向不同person对象的引用。

如果我们按照下面这样做会发生什么?
$p2 = $p1;
$p1和$p2都指向同一个对象。然而,$p2的析构函数被调用了,因为$p2指向的对象已经不再被使用或在作用域之外了。

同时我们可以看到的,当我们将$p1分配给$p2时,并没有创建真正的对象,只是修改了引用。我们复制对象的方式被称为浅拷贝。
为了执行深度复制,从而创建一个新对象,我们可以使用clone操作符,如下所示:
$p2 = clone $p1;
当我们执行该语句时,$p2引用指向新创建的对象。另外,在执行过程中,将自动调用__clone()魔术方法。
我们可以把__clone()魔术方法添加到Person类来查看它是如何工作的。
public function __clone(){
echo '复制对象 <br>';
}

