美文网首页
爬坑:彻底搞懂php自加自减运算

爬坑:彻底搞懂php自加自减运算

作者: 老衲灬 | 来源:发表于2018-06-14 23:39 被阅读0次

    核心运算原则:

    1、整个运算式按照正常运算法则运算,例如简单的从左往右运算,只要前两项不包含自加自减运算,就先算出结果,再按照运算顺序往后算。

    2、前自加后自加本项表达式的运算处理,假设 $i=10
    <1> 运算中遇到 ++$i 就先处理完本项,把整个运算式中所有未运算的自加自减的变量 $i 和非自加自减的变量 $i的值先加1,当然本项++$i结果为11再去与其它项的运算;

    【特别注意:如果第一项就为自加自减,则第二项的自加自减不再影响第一项中 $i 的值,因为第一项的自加自减表达式处理完后,相当于已经运算得到了本项的结果】

    <2> 运算中遇到 $i++ 同样先处理完本项,把运算式中除本项外所有未运算的自加自减的变量 $i 和非自加自减的变量 $i 的值都先加1,而本项 $i++ 结果取值10再去与其它项的运算。

    加深理解后自加:后自加,就是 $i++ 本项在处理时先取值10,确定本项用10去参与运算,并不先加1,但是本项 $i++ 处理完后, $i 才会加1,即下次使用 $i 值为11,所以处理完本项,当再运算其它运算项中的 $i 时,其实就是再次使用】

    示例详解:

    $i = 10;
    echo $i + $i++;
    // 分析:
    // 第一项$i非自加自减的变量,先不管,需要确定第二项才能进行运算
    // 第二项为后自加,所以本项参与运算的数值为10,然后处理本项的后自加,则第一项改变为11
    // 即:11 + 10 = 21 结果为21
    
    $i = 10;
    echo $i + ++$i;
    // 分析:
    // 第一项 $i 非自加自减的变量,先不管,需要确定第二项才能进行运算
    // 第二项为前自加,所以所有的 $i 全部加1,则本项参与运算的数值为11,第一项值变为11
    // 即:11 + 11 = 22 结果为22
    
    $i = 5;
    echo $i + $i++ + ++$i;
    // 分析:
    // 第一项$i非自加自减的变量,先不管,需要确定第二项才能进行运算
    // 第二项后自加,按照之前的算法
    // 此时运算式变为: 6 + 5 + ++6 
    // 此时前两项可以运算出结果即为: 11 + ++6
    // 则最终结果为11 + 7 = 18
    

    特殊语法示例:

    $i = 10;
    echo $i+++$i; 
    // 中间三个连加的情况
    // 会解析为: $i++ +$i
    // 结果为: 21
    
    $i = 10;
    echo $i+++$i+++$i; 
    // 解析为 $i++ +$i++ +$i
    // 结果为 33
    
    $i = 10;
    echo $i+++++$i; // 语法报错
    
    $i = 10;
    echo ++$i+++$i; // 语法报错
    

    加深理解示例:

    <?php
        $v1=10;
        echo $v1++."<br>";                                  //结果:10
        echo $v1."<br><br>";                                //结果:11
        $v2=10;
        echo ++$v2."<br>";                                  //结果:11
        echo $v2."<br><br>";                                //结果:11
        $v3=10;
        echo $v=$v3+ ++$v3."<br><br>";                      //结果:22
        $v4=10;
        echo $v=$v4+ $v4++."<br><br>";                      //结果:21
        $v5=10;
        echo $v=$v5+$v5+ $v5++."<br><br>";                  //结果:30
        $v6=10;
        echo $v=$v6+$v6+ ++$v6."<br><br>";                  //结果:31
        //按照从左到右的运算顺序,先是两个$v6,没有自加自减,可以先得出20
        //   即=20+ ++$v6  即=31
        $v7=10;
        echo $v=$v7+ ++$v7+$v7+$v7++ +$v7."<br><br>";       //结果:56
        //按照从左到右的运算顺序,前两项相加,但第二项是自加,所以
        //++$v7先按照自加算法,运算完即如下(括号内代表此时$v7的值):
        //   $v=$v7(11)+$v7(11)+$v7(11)+$v7(11)++ +$v7(11)
        //此时前三项不含自加自减运算可以直接相加,结果如下:
        //   $v=33+$v7(11)++ +$v7(11)
        // 即$v=33+$v7(11)+$v7(12) 即最终结果:56 
        $v8=10;
        echo $v8+=$v8+$v8++;//注意运算顺序:$v8=$v8+($v8+$v8++)结果:32
    ?>
    

    相关文章

      网友评论

          本文标题:爬坑:彻底搞懂php自加自减运算

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