在本教程中,我们将学习如何使用浅复制复制对象,以及使用PHP clone object进行深复制。
让我们开始创建一个简单的Person类来进行演示:
class
Person{
private
$sn
;
$firstName
$lastName
public
function
__construct(
,
){
$this
->sn =
->firstName =
->lastName =
}
__destruct(){
echo
sprintf(
"编号# %s 的对象已注销."
->sn);
__toString(){
return
"编号: %s, 名称: %s, %s"
->sn,
->lastName,
->firstName);
现在,我们可以创建一些Person对象:
$p1
=
new
Person(
'1234567'
'Alice'
'road'
);
$p2
'3456789'
'the'
'itroad'
我们创建了两个对象:$p1和$p2。$p1和$p2都是指向不同person对象的引用。
如果我们按照下面这样做会发生什么?
$p1和$p2都指向同一个对象。然而,$p2的析构函数被调用了,因为$p2指向的对象已经不再被使用或在作用域之外了。
同时我们可以看到的,当我们将$p1分配给$p2时,并没有创建真正的对象,只是修改了引用。我们复制对象的方式被称为浅拷贝。
为了执行深度复制,从而创建一个新对象,我们可以使用clone操作符,如下所示:
clone
当我们执行该语句时,$p2引用指向新创建的对象。另外,在执行过程中,将自动调用__clone()魔术方法。
我们可以把__clone()魔术方法添加到Person类来查看它是如何工作的。
__clone(){
'复制对象 <br>'
原文链接:https://codingdict.com/