PHP克隆对象


在本教程中,我们将学习如何使用浅复制复制对象,以及使用PHP clone object进行深复制。

让我们开始创建一个简单的Person类来进行演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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对象:

1
2
3
4
5
$p1 = new Person('1234567', 'Alice', 'road');
echo $p1;
 
$p2 = new Person('3456789','the','itroad');
echo $p2;

我们创建了两个对象:$p1和$p2。$p1和$p2都是指向不同person对象的引用。

如果我们按照下面这样做会发生什么?

1
$p2 = $p1;

$p1和$p2都指向同一个对象。然而,$p2的析构函数被调用了,因为$p2指向的对象已经不再被使用或在作用域之外了。

同时我们可以看到的,当我们将$p1分配给$p2时,并没有创建真正的对象,只是修改了引用。我们复制对象的方式被称为浅拷贝。

为了执行深度复制,从而创建一个新对象,我们可以使用clone操作符,如下所示:

1
$p2 = clone $p1;

当我们执行该语句时,$p2引用指向新创建的对象。另外,在执行过程中,将自动调用__clone()魔术方法。

我们可以把__clone()魔术方法添加到Person类来查看它是如何工作的。

1
2
3
public function __clone(){
echo '复制对象 <br>';
}


原文链接:https://codingdict.com/