yangzailu

导航

php中的static静态变量

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

 

posted on 2017-11-22 11:43  飞离地平线  阅读(3240)  评论(2编辑  收藏  举报