打印的值分别为11和12.这是为什么?有没有办法删除克隆的参考?
class A {
public $z = 10;
}
$a1 = new A();
$z = &$a1->z;
$a2 = clone $a1;
$a1->z = 11;
var_dump($z);
$a2->z = 12;
var_dump($z);
答案 0 :(得分:0)
为什么会这样?
答:当你克隆时,你也在克隆参考文献。
$z = &Ref to $a1->z [0x000F]
$a2-z = [0x000F]
$a1->z = 11; //[0x000F] = 11;
由于两个类实例引用相同的内存,因此当您更改$ z时,它会更改两个类的值。
降低价值的唯一方法就是取消它。
unset($a2->z);
$a2->z = 12;
这是一个完整的例子。
class A {
public $z = 10;
}
$a1 = new A();
$z = &$a1->z;
$a2 = clone $a1;
$a3 = clone $a2;
$a1->z = 11;
var_dump($z);
$a2->z = 12;
var_dump($z);
unset($a3->z);
$a3->z = 13;
var_dump($z);
var_dump($a3->z);
输出
int(11)
int(12)
int(12) //$z
int(13) //$a3->z So $a3->z is now unlinked from the Unset
我希望这能回答你的问题