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