Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top