php – 对ZVals的澄清
我正在读这个:
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 */
我学会了用C编程.我知道PHP是不同的,它使用ZVals而不是内存位置作为参考.但是当你运行这段代码时: $foo = &$bar; $bar = &$foo; 在我看来,会有两个ZVals.在C中,将存在两个存储器位置(并且值将是相反的存储器位置). 谁能解释一下? 解决方法
它主要归结为符号表的工作原理.这是一张有两面的桌子:
symbol name | value -------------+------- | 有趣的是,可以为一个值分配多个名称: symbol name | value -------------+------- foo,bar | 'baz' 使用=分配符号时,表的值侧会发生变化: $baz = 42; symbol name | value -------------+------- baz | 42 使用=&分配时,符号名称侧移动到值为的位置: $foo =& $baz; symbol name | value -------------+------- baz,foo | 42 所以在你的例子中,从头开始: $foo =& $bar; ($bar does not exist,is null,which is implicitly created,$foo is pointed to where the implicitly created $bar points) symbol name | value -------------+------- foo,bar | null $bar = &$foo; (no real change,$bar is pointed to where $foo is pointing) symbol name | value -------------+------- foo,bar | null $baz = 'baz'; symbol name | value -------------+------- foo,bar | null baz | 'baz' $foo = &$baz; ($foo is pointed to where $baz is pointing) symbol name | value -------------+------- bar | null baz,foo | 'baz' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |