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
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;
$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
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;
$q=&$i;
echo (++$i)+$i++; // 输出 3+2=5
注意,本解析只是博主个人的理解和总结,根本的原因,应该去看php运算的汇编代码,看它是怎么的一个计算过程,才能从根本上解释这个问题。