首页 新闻 会员 周边 捐助

以下代码分析,第三次循环我为什么分析错了?

-1
悬赏园豆:5 [已关闭问题] 关闭于 2017-11-22 13:34
<?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);

    /*分析:
    $i = 0;
    $i<=5;(true)
    $i++ =1;
    $c=$class->add(1); 
    $b = 1;
    static $a=1;
    $a+=$b = 2;
    $c=2;

    第二次循环:

    $i = 1;
    $i<=5;(true)
    $i++ =2;
    $c=$class->add(2); 
    php中的变量作用范围的另一个重要特性就是静态变量(static 变量)。
    静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果。

    $b=2;
    $a = 2;
    $a+=b = 4;
    $c=4; 

    第三次循环:
    $i = 2;
    $i<=5;(true)
    $i++ =3;
    $c=$class->add(3); 
    $b=3;
    $a = 2;
    $a+=b = 5;
    $c=5; 

    第四次次循环:

    $i = 3;
    $i<=5;(true)
    $i++ =4;
    $c=$class->add(4); 
    $b=4;
    $a = 2;
    $a+=b = 6;
    $c=6;

    第五次次循环:

    $i = 4;
    $i<=5;(true)
    $i++ =5;
    $c=$class->add(5); 
    $b=5;
    $a = 2;
    $a+=b = 7;
    $c=7;
*/

// 2->4->7->11->16
php
飞离地平线的主页 飞离地平线 | 初学一级 | 园豆:18
提问于:2017-11-22 10:43
< >
分享
所有回答(1)
0

首先按照你的思路来  第三次a刚开始应该是4而不是2 因为你第二次已经return a=4了     还有就是for应该是从0开始走的

1 $i=0    $a=1;
2 $i=1    $a=2;
3 $i=2    $a=4;
4 $i=3    $a=7;
5 $i=4    $a=11;
6 $i=5    $a=16;
za_szybko | 园豆:166 (初学一级) | 2017-11-23 18:46

谢谢 明白了

支持(0) 反对(1) 飞离地平线 | 园豆:18 (初学一级) | 2017-11-24 09:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册