Reputation: 23178
See this code: http://codepad.org/s8XnQJPN
function getvalues($delete = false)
{
static $x;
if($delete)
{
echo "array before deleting:\n";
print_r($x);
unset($x);
}
else
{
for($a=0;$a<3;$a++)
{
$x[]=mt_rand(0,133);
}
}
}
getvalues();
getvalues(true); //delete array values
getvalues(true); //this should not output array since it is deleted
Output:
array before deleting:
Array
(
[0] => 79
[1] => 49
[2] => 133
)
array before deleting:
Array
(
[0] => 79
[1] => 49
[2] => 133
)
Why is the array, $x
not being deleted when it is being unset?
Upvotes: 4
Views: 11608
Reputation: 2797
If a static variable is unset, it destroys the variable only in the function in which it is unset. The following calls to the function (getValues()) will make use of the value before it was unset.
This is mentioned the documentation of the unset function as well. http://php.net/manual/en/function.unset.php
Upvotes: 10
Reputation: 86366
From the Doc
If a static variable is unset() inside of a function, unset() destroys the variable only in the context of the rest of a function. Following calls will restore the previous value of a variable.
function foo()
{
static $bar;
$bar++;
echo "Before unset: $bar, ";
unset($bar);
$bar = 23;
echo "after unset: $bar\n";
}
foo();
foo();
foo();
The above example will output:
Before unset: 1, after unset: 23
Before unset: 2, after unset: 23
Before unset: 3, after unset: 23
Upvotes: 4