查看此代码: 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
输出:
array before deleting:
Array
(
[0] => 79
[1] => 49
[2] => 133
)
array before deleting:
Array
(
[0] => 79
[1] => 49
[2] => 133
)
为什么数组$x
在未设置时不会被删除?
答案 0 :(得分:7)
如果未设置静态变量,则仅在未设置的函数中销毁该变量。以下对函数的调用(getValues())将在取消设置之前使用该值。
这也提到了unset函数的文档。 http://php.net/manual/en/function.unset.php
答案 1 :(得分:3)
来自Doc
如果静态变量在函数内部未设置(),则unset()会破坏 变量仅在函数的其余部分的上下文中。以下 调用将恢复变量的先前值。
function foo()
{
static $bar;
$bar++;
echo "Before unset: $bar, ";
unset($bar);
$bar = 23;
echo "after unset: $bar\n";
}
foo();
foo();
foo();
以上示例将输出:
Before unset: 1, after unset: 23
Before unset: 2, after unset: 23
Before unset: 3, after unset: 23