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

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运算的汇编代码,看它是怎么的一个计算过程,才能从根本上解释这个问题。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值