unset() static variable doesn't work?

dukevin picture dukevin · Feb 25, 2012 · Viewed 10.2k times · Source

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?

Answer

everconfusedGuy picture everconfusedGuy · Feb 25, 2012

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