代码
class Foo {
public $a;
}
$arr = [];
$foo = new Foo();
$foo->a = 1;
$arr[0] = $foo;
$arr[0]->a = 2;
echo $foo->a;
我的测试结果是2。然而,我不确定这种行为是否得到保证或行为是随机的和/或将根据优化器/版本/内存使用/关联或不的状态而改变/…
有保证吗?
注意:我有这个问题的原因是下面的代码将输出1
$arr = [];
$foo = 1;
$arr[0] = $foo;
$arr[0] = 2;
echo $foo;
由于$foo和$arr在内存中指向相同的位置,因此$arr的任何更改也会影响$foo。事实上:$arr[0] === $foo
如果你想从$foo中克隆一个变量,你必须测试:
$arr[0] = clone $foo;
所以$arr中的任何修改都不会影响$foo,反之亦然。