$a=10;echo ++$a+$a++; //5 为23 //7为22
这段代码 5 和 7 的结果为什么不同
$a = 1;echo 1+$a++;//2$a=1;echo $a+$a++;//3
上面的为什么为2
下面的计算顺数是否为($a+$a)+1 = 1+1+1
虽然工作中不会这么写 但是还是想理解运算顺序
解决方案
要理解程序运行时的顺序,要有一个 栈
的概念。
$a=10;echo ++$a+$a++;
当++$a+$a++
时
入栈顺序是 push ++$a
push+
push$a++
栈的运算顺序是后入先出,即:
pop $a++
:此时 $a=11,但是$a++
的值是10,因为先用再加。
然后pop+
然后pop++$a
:此时$a=11 ,但是++$a
的值是12,因为先加再用。
所以最终的值是22。
可以理解成 运算符是从右向左运算的
$a=1;echo $a+$a++;
也是这个道理。
以上仅是在下的一点拙见,是根据我对C的理解做出来的推测,已经在关于php $a+$a+$a++ 运算结果的疑问中找到答案,有兴趣的可以移步,英文好的同学可以移步What should be the output of echo ++$a + $a++