unset() side effects in functions
| From: | Robert Enyedi | Date: | Mon, 23 Apr 2007 11:04:46 +0000 |
| Subject: | unset() side effects in functions | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-253511@lists.php.net to get a copy of this message | ||
I'm doing some experimenting with the unset() (http://php.net/unset) language construct in a PHP 5.2.1 installation. I did not find any documentation on what happens to an identically named local variable's value after an unset is performed.
Let me start with this example:
<?php
function dostuff() {
$a = 4;
echo ">in function (init): ".$a."<\n";
global $a;
/*CHANGEME*/ unset($a);
echo ">in function (after unset): ".$a."<\n";
$a = 3;
echo ">in function (after local assign): ".$a."<\n";
}
$a = 2;
dostuff();
echo ">in page: ".$a."<\n";
?>
The output is:
in function (init): 4< in function (after unset): < in function (after local assign): 3< in page: 2<So this basically means that the global $a is dereferenced by the unset() call and the local $a gets reinitialized. A different thing happens when we replace the /*CHANGEME*/ line with unset using the $GLOBALS[] array (the recommended way of unsetting a global variable from inside a function): unset($GLOBALS['a']); This time the output is:
in function (init): 4< in function (after unset): 2< in function (after local assign): 3< in page: <Notice that after the unset statement the global $a is properly unset BUT the value of the local $a becomes 2, which was the value of the global $a at the function entry point. Are these behaviors documented somewhere or should't I rely on these unset() side effects at all in my code? Thanks, Robert