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>'; }