【问题标题】:Why can a reference reference multiple variables?为什么引用可以引用多个变量?
【发布时间】:2016-03-05 09:58:15
【问题描述】:

打印的值都是 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);

【问题讨论】:

  • 你为什么不能这样做:$a2 = new A();
  • @divix 这不是一个实际情况,而是一个简化的例子。
  • 试试$a2 = $a1 这应该可以解决您的简化问题...

标签: php class object reference clone


【解决方案1】:

这是为什么?

答:当你在克隆时,你也在克隆参考。

$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

我希望这能回答你的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    相关资源
    最近更新 更多