我有这样的功能,并且我使用不同的值声明相同的静态变量两次。然后,我调用了函数,但结果让我感到惊讶。
function question(){
static $a=1;
$a++;
echo $a; // output:?
static $a=10;
$a++;
echo $a; // output:?
}
我认为输出为:2 11
,但输出为:11 12
。为什么呢?
答案 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:?
}