在PHP中重新初始化静态成员

时间:2011-11-17 16:14:55

标签: php static

我今天的考试中有一个问题,我必须确定输出。

<?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中重新初始化静态变量吗?具有相同或任何其他值?

2 个答案:

答案 0 :(得分:5)

  

每次进入函数时,成员$ count都会被重新初始化

这是不正确的。静态变量仅初始化一次,这是静态声明的变量与“普通”变量的不同之处。所以基本上,你要为$count分配一个初始值。在多次调用statfun()时,此静态变量的值将被保留并可以重复使用。

the manual,“使用静态变量”部分:

  

静态变量仅存在于本地函数作用域中,但在程序执行离开此作用域时它不会丢失其值。

另请参阅手册中的示例代码。那里的差异应该回答你的问题。

答案 1 :(得分:3)

传递2次计数时,

设置为2 与$count+=$x; 然后你拨打了statfun(++$x)$x+12+1=3 所以现在$ count将是$count+3,那就是5,然后你调用statfun,其值为3,然后$ count将 $ count +(3 + 1)= 9 ,依此类推等等

静态变量将保持其状态。所以,如果你这样称呼它

所以基本上静态变量将保持其值并且不会被重新初始化。