我在今天的考试中有一道题,我必须确定输出。
<?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中重新初始化静态变量吗?具有相同或任何其他值的?
发布于 2011-11-18 00:18:18
每次进入函数时,成员$count都会重新初始化
这是不正确的。静态变量只初始化一次,这就是静态声明变量与“普通”变量的不同之处。所以基本上,你是在给$count
赋一个初始值。在对statfun()
的多次调用中,此静态变量的值被保留并可以重用。
来自the manual的“使用静态变量”一节:
静态变量仅存在于局部函数作用域中,但当程序执行离开此作用域时,它不会丢失其值。
另请看手册中的示例代码。这里所说的区别应该能回答你的问题。
发布于 2011-11-18 00:21:14
当您使用$count+=$x;
传递2时,count被设置为2,然后您调用了statfun(++$x)
,它是$x+1
,也就是2+1=3
,所以现在$count将是$count+3
,也就是5,然后您使用值3调用statfun,然后$count将$count+(3+1) = 9,依此类推
静态变量将保存其状态。所以如果你这样称呼它
所以基本上静态变量将保留它的值,并且不会被重新初始化。
https://stackoverflow.com/questions/8170492
复制相似问题