今天碰到了一个php的小试题,一直没有明白为什么第三次循环是static静态变量没有起作用呢?想了好久才明白原理。
<?php
class MyClass{
function add($b){
static $a=1;
$a+=$b;
return $a;
}
}
$class = new MyClass();
for($i=0;$i<=5;$i++){
$c=$class->add($i);
}
echo($c);
/*php中的变量作用范围的另一个重要特性就是静态变量(static 变量)。
静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果。*/
分析:
$i = 0;
$i<=5;(true)
$i++ =1;
$c=$class->add(0);
$b = 0;
static $a=1;
$a+=$b = 1+0;
$c=1;
第二次循环:
$i = 1;
$i<=5;(true)
$i++ =2;
$c=$class->add(1);
$b=1;
$a = 1;
$a+=b = 1+1;
$c=2;
第三次循环:
$i = 2;
$i<=5;(true)
$i++ =3;
$c=$class->add(2);
$b=2;
$a = 2;
$a+=b = 4;
$c=4;
第四次循环:
$i = 3;
$i<=5;(true)
$i++ =4;
$c=$class->add(3);
$b=3;
$a = 4;
$a+=b = 4+3;
$c=7;
第五次循环:
$i = 4;
$i<=5;(true)
$i++ =5;
$c=$class->add(4);
$b=4;
$a = 7;
$a+=b = 7+4;
$c=11;
第六次循环:
$i = 5;
$i<=5;(true)
$i++ =6;
$c=$class->add(5);
$b=5;
$a = 11;
$a+=b = 11+5;
$c=16;