今天碰到了一個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;