为什么引用可以引用多个变量?

时间:2015-12-01 12:59:56

标签: php class object reference clone

打印的值分别为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);

1 个答案:

答案 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

我希望这能回答你的问题