我在读这个: http: //www.dereleased.com/2011/04/27/the-importance-of-zvals-and-circular-references/
还有一个例子让我有点失落。
$foo = &$bar;
$bar = &$foo;
$baz = 'baz';
$foo = &$baz;
var_dump($foo, $bar);
/*
string(3) "baz"
NULL
*/
如果您一直在关注,这应该很有意义。$foo 被创建,并指向一个由 $bar 标识的 ZVal 位置;创建 $bar 时,它指向 $foo 所指向的同一位置。当然,那个位置是空的。当 $foo 被重新分配时,唯一改变的是 ZVal $foo 指向哪个;如果我们首先为 $foo 分配了一个不同的值,那么 $bar 仍将保留该值。
我学会了用 C 编程。我知道 PHP 是不同的,它使用 ZVals 而不是内存位置作为引用。但是当你运行这段代码时:
$foo = &$bar;
$bar = &$foo;
在我看来,会有两个 ZVals。在 C 中会有两个内存位置(并且值将位于相反的内存位置)。
有人可以解释吗?