美文网首页
有关php静态变量初始化

有关php静态变量初始化

作者: jmtung | 来源:发表于2016-11-14 22:09 被阅读15次

    最近翻翻php手册补补基础,看到有关静态变量的一段代码稍微有不解:

    <?php
      function test(){    
        static $count = 0;    
        $count++;    
        echo $count;    
        if ($count < 10) { 
            test();    
        }    
        $count--;
      }
    ?>
    

    输出内容为12345678910
    疑惑:递归每次调用函数本身不是应该重新初始化$count变量?
    搜索相关答案,得出下面的结论

    静态变量会在整个执行的过程中最先初始化后再执行后面的代码

    也就是说,静态变量的初始化只进行一次,而且是在定义变量时初始化,如果多个定义取最后一次定义的值
    举个栗子:

    <?php
        static $a=1;
        echo $a;
        static $a=2;
        echo $a;
        static $a=3;
        echo $a;
    ?>
    

    输出结果为3 3 3
    在上面的例子中,静态变量$a的初始值为最后一次定义静态变量时的值,相当于如下代码段:

    <?php
        static $a=1;
        static $a=2;
        static $a=3;
        echo $a;
        echo $a;
        echo $a;
    ?>
    

    同理,手册中的问题也是不是得到了解决?
    若按原来的思路,不妨加个判断验证下:

    <?php
        function test()
        {    
          static $count = 0;    
          if ($GLOBALS[$count]==5)
          {
            static $count=8;    
          }    
          $count++;    
          echo $count;    
          if ($count < 10)
          {
            test();    
          }    
          $count--;
         }
        test();
    ?>
    

    输出结果 9 10,果然,最后一次定义为static $count=8;初值为8,只进行两遍递归

    相关文章

      网友评论

          本文标题:有关php静态变量初始化

          本文链接:https://www.haomeiwen.com/subject/ntkkpttx.html