php中$i+$i++类似问题

    xiaoxiao2021-12-14  23

    php中$i+$i++类似问题     问题一:  $i=1;                         $i+$i++  式子的值?                                              等于3嘛? 不对。                       那等于4嘛? 还是不对。                       那等于什么呢?          解析:由于++的优先级大于+所以先执行++,但是$i++ 是先给值后执行自加操作。也就是说式子变成了                    $i+1  同时$i被执行++操作,所以此时$i=2,式子$i+$i++ 变为:2+1。所以式子$i+$i++ 的值为3                   要是还没有明白的话,可以这样理解:                   $i=1;                   $a=$i++;                   $i+$a  // 2+1=3               我相信要是继续认真思考,还是会感到困惑的。那我们就继续往下讨论。          问题二: $i=1;                    $i+$i+$i++  式子的值?                         等于 2+2+1=5嘛? 不对,怎么可能呢?不是按照上面解析来推的啊?                    那等于什么呢?       解析:首先我们必须明白一件事情,就是优先级只对局部有效什么叫做局部有效呢?比如:$a+$b+$c*$d                  虽然在该式子中*乘法优先级最高,但是并不影响$a+$b按照从左到右的顺序先执行加法。                  同样的虽然在式子 $i+$i+$i++ 中++优先级最高但是最前面的两个$i可以先执行加法,所以式子就变成了                  2+$i++ 很显然等于3 。       问题三:$i=1;                   (++$i)+(++$i)+(++$i)+(++$i)+(++$i) 式子的值呢?                   等于6+6+6+6+6=30嘛? 不对                   那等于什么呢?       解析:++$i  是先执行先加后赋值,但是有多个加运算,所以从左到右一步步运行的过程应该是这样的,如下:                  2+(++$i)+(++$i)+(++$i)+(++$i) =>$i=2                  2+3+(++$i)+(++$i)+(++$i) =>$i=3                  5+4+(++$i)+(++$i) => $i=4                  9+5+(++$i) => $i=5                  14+6 =>$i=6                  20                  所以式子(++$i)+(++$i)+(++$i)+(++$i)+(++$i)的值为20         问题四:$i=1;                  $q=&$i;                   (++$i)+(++$i)+(++$i)+(++$i)+(++$i) 式子的值呢?                                                      等于2+3+4+5+6=20嘛? 不对,是按照问题三的解析推出来的啊?                   那等于什么呢?      解析:++$i  是先执行先加后赋值,但是问题四与问题三不同在于$i变量引用赋给了$q,也就是说由于$i变量被引用了,所以$i由数字型变成了引用型。其每步运算如下:                   $i+(++$i)+(++$i)+(++$i)+(++$i) =>$i=2                  $i+$i+(++$i)+(++$i)+(++$i) =>$i=3                  6+4+(++$i)+(++$i) => $i=4                  10+5+(++$i) => $i=5                  15+6 =>$i=6                  21                  所以式子(++$i)+(++$i)+(++$i)+(++$i)+(++$i)的值为21    问题五:$i=1;                   ($i++)+($i++)+($i++)+($i++)+($i++) 式子的值?                                       直接告诉你  等于15                    那如果是这样呢?                      $i=1;                     $q=&$i;                     ($i++)+($i++)+($i++)+($i++)+($i++) 式子的值?                     直接告诉你  还是等于15                    很奇怪吧!        解析:个人推论: $i++ 和 ++$i 是有区别的,特别是在是数值型还是引用型。                                     1.对于后自加$i++而言:                                             (1) 无论$i是数值型还是引用型,都是提出$i的值,然后对$i进行加1。                                     2.对于先自加++$i而言,                                             (1) $i是数值型时,先$i进行加1然后提出$i的值。                                             (2) $i是引用型时,先将$i进行加1然后返回$i变量。                    例子一:                       $i=1;                       echo (++$i)+$i++; // 输出 2+2=4                                       例子二:                        $i=1;                       $q=&$i;                       echo (++$i)+$i++; // 输出 3+2=5              注意,本解析只是博主个人的理解和总结,根本的原因,应该去看php运算的汇编代码,看它是怎么的一个计算过程,才能从根本上解释这个问题。
    转载请注明原文地址: https://ju.6miu.com/read-969213.html

    最新回复(0)