php中$global['']和关键字global为什么会受到静态变量的影

发布网友

我来回答

1个回答

热心网友

第一次遇到这种问题,让人好奇,如何能发现这个问题的呢?

理解“赋值”概念很重要。例如,当执行 $a = 1; 时,并非创建一个名为 $a 的数据和值,而是在内存中建立一个指向数据1的地址。接着,当 $b = &$a; 时,不是创建$ b指向$a的链接,而是创建指向同一个地址的两个链接。过程可以形象描述为:

1. 创建一个地址(箱A),并存入数据1。

2. $a 指向箱A。

3. $b 同时指向箱A。

若销毁 $a ,$b 仍然存在并指向相同的数据。当 $b 和 $a 同时指向箱A时,两者都能修改箱A内的数据。

若要 $b 赋值时不影响 $a,需改变指向。当 $b = $c; 时,$a 和 $b 都会输出$c的数据,实质是改变箱A的数据。相反,当 $b = &$c; 时,$b 指向$c对应的箱子(箱B),此时改变$c或$b的数据时,两者的输出同时更新。

回到问题核心:在PHP中,$GLOBALS['a'] = &$static_a; 代码将$GLOBALS['a']指向了一个新的箱子,$a和$GLOBALS['a']指向不同箱子后,$a的赋值操作不再影响$GLOBALS['a']。

若去掉 $GLOBALS['a'] = &$static_a; 中的 & 符号,$a 的赋值操作将再次有效。

简化代码并加以注释后,问题变得清晰。感觉对PHP的赋值和变量指向机制有了更深的理解。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com