4
我在看這個:http://www.dereleased.com/2011/04/27/the-importance-of-zvals-and-circular-references/對ZVals的澄清
有一個例子讓我失望了一下。
$foo = &$bar;
$bar = &$foo;
$baz = 'baz';
$foo = &$baz;
var_dump($foo, $bar);
/*
string(3) "baz"
NULL
*/
如果你一直在下面,這可以完美地工作。 $ foo的 被創建,並在由$巴標識的ZVAL指向的位置;當創建 $吧,它指向同一個地方$ foo的指出。這 位置,當然,爲空。當$ foo的重新分配,唯一改變的事情 是其ZVAL $ foo的點;如果我們第一次分配 不同的值$ foo的,那麼$酒吧仍然保留該 值。
我學會了程序C.我的理解是PHP是不同的,它使用的變量容器,而不是存儲位置,如引用。但是,當你運行該代碼:
$foo = &$bar;
$bar = &$foo;
在我看來,那就會有兩個變量容器。在C中會有兩個內存位置(並且這些值將是相反的內存位置)。
有人能解釋一下嗎?
所以,這是因爲它雖然符號表中的所有作品。當我看到$ a =&$ b時,我應該這樣認爲:「將$ a移動到符號表的同一行,而不是$ b」,「將$ a解析爲$ b」。 – Beachhouse
沒錯。 '=&x'基本上是*「建立一個與x相同的值的引用」,其中「引用」只是簡單地用符號表中的一個條目來完成。 – deceze