I came across some weird behavior in 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

Anybody know why this is happening?

有帮助吗?

解决方案

Print out what it’s deleting and enable warnings to see what’s actually happening! =)

$GLOBALS contains GLOBALS. You unset it, which removes the actual global variable. If this were just pass-by-reference behaviour, you would get an empty array, not NULL.

其他提示

This happens because its the expected behavior:

This is a 'superglobal', or automatic global, variable. This simply means that it is available in all scopes throughout a script. There is no need to do global $variable; to access it within functions or methods.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top