$ GLOBALS超全局在传递给函数时会被修改

时间:2013-05-09 14:50:54

标签: php superglobals

我在PHP中遇到了一些奇怪的行为:

function f($var) { // not using references
    foreach ($var as $k => $v) {
        unset($var[$k]); // shouldn't this unset from a copy?!
    }
}

print '<pre>';
var_dump($GLOBALS); // array
f($GLOBALS);
var_dump($GLOBALS); // null?!

http://3v4l.org/dQmQN

有人知道为什么会这样吗?

2 个答案:

答案 0 :(得分:3)

打印出删除内容并启用警告以查看what’s actually happening! =)

$GLOBALS包含GLOBALS。你unset它,它删除了实际的全局变量。如果这是只是传递引用行为,那么你将获得一个空数组,而不是NULL

答案 1 :(得分:1)

这是因为expected behavior

  

这是一个超全球&#39;或自动全局变量。这很简单   表示它在整个脚本的所有范围内都可用。有   不需要做全局$变量;在函数或函数内访问它   方法