php中$i+$i++类似问题,php
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运算的汇编代码,看它是怎么的一个计算过程,才能从根本上解释这个问题。
PHP之友评论