PHP中为何在函数内unset全局变量不生效?
问题原因
global关键字的本质是在当前函数的局部作用域内,创建一个指向全局变量的局部引用,而非直接绑定全局变量本身:
- 你在
unsetvalue函数中执行global $name的逻辑,等价于在函数内执行了$name = &$GLOBALS['name'],相当于生成了一个局部的指针指向全局$name的存储位置 - 此时调用
unset($name),只会销毁当前函数局部作用域内的这个引用指针,不会触及全局作用域的原变量,也不会删除原变量对应的存储内容,因此函数执行结束后全局$name仍然存在,输出结果为john - 而你在全局作用域直接调用
unset($name),销毁的就是全局作用域下的$name变量本身,后续访问自然会报undefined variable错误
解决方案
如果需要在函数内销毁全局变量,可以直接操作$GLOBALS超全局数组,示例代码如下:
function unsetvalue() { unset($GLOBALS['name']); } $name = "john"; unsetvalue(); echo $name; // 此时会报undefined variable错误,符合预期
内容的提问来源于stack exchange,提问作者Hossein
相关产品推荐
相关产品推荐

