在函数内重新声明相同的静态变量

时间:2015-06-26 03:44:53

标签: php static

我有这样的功能,并且我使用不同的值声明相同的静态变量两次。然后,我调用了函数,但结果让我感到惊讶。

function question(){
    static $a=1;
    $a++;
    echo $a; // output:?
    static $a=10;
    $a++;
    echo $a; // output:?
}

我认为输出为:2 11,但输出为:11 12。为什么呢?

3 个答案:

答案 0 :(得分:2)

如果在函数内声明并初始化相同的静态变量 ,那么该变量将采用 last 声明的值(静态声明在编译时。)

在这种情况下,$a的静态变量将在编译时采用10的值,忽略前一个相同声明中1的值。

答案 1 :(得分:0)

Static的工作方式与在类中的工作方式相同。 该变量在函数的所有实例中共享。 因此,如果您多次初始化相同的静态变量,那么它将始终采用最新值。

答案 2 :(得分:0)

静态变量仅存在于声明的本地函数作用域中,但在程序执行离开此作用域时它不会丢失其值。 使用Static关键字本身就不会失去当前计数的跟踪。 所以在你的情况下,函数执行停止在$ a = 10; $ A ++; 因此你有11和12作为输出。 如果你想输出为2和11;只保留一个静态的声明,如下所示。

function question(){
    $a=1;
    $a++;
    echo $a; // output:?
    static $a=10;
    $a++;
    echo $a; // output:?
}