Search code examples
phpsuperglobals

$GLOBALS superglobal gets modified when passed to a function


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?


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.