我今天的考试中有一个问题,我必须确定输出。
<?php
function statfun($x)
{
static $count=0;
$count += $x;
if ($count < 20) {
echo "$count <br>";
statfun(++$x);
} else {
echo "last num is $count";
}
}
statfun(2);
?>
输出
2
5
9
14
last num is 20
我不知道为什么这是输出。我知道这是由静态成员引起的,但每次进入函数时,成员$count
都会重新初始化。我在Static Keyword看到了文档。
但是没有关于静态变量重新初始化的文章?我们可以在PHP中重新初始化静态变量吗?具有相同或任何其他值?
答案 0 :(得分:5)
每次进入函数时,成员$ count都会被重新初始化
这是不正确的。静态变量仅初始化一次,这是静态声明的变量与“普通”变量的不同之处。所以基本上,你要为$count
分配一个初始值。在多次调用statfun()
时,此静态变量的值将被保留并可以重复使用。
从the manual,“使用静态变量”部分:
静态变量仅存在于本地函数作用域中,但在程序执行离开此作用域时它不会丢失其值。
另请参阅手册中的示例代码。那里的差异应该回答你的问题。
答案 1 :(得分:3)
设置为2
与$count+=$x;
然后你拨打了statfun(++$x)
,$x+1
即2+1=3
所以现在$ count将是$count+3
,那就是5,然后你调用statfun,其值为3,然后$ count将 $ count +(3 + 1)= 9 ,依此类推等等
静态变量将保持其状态。所以,如果你这样称呼它
所以基本上静态变量将保持其值并且不会被重新初始化。