在PHP手册,operator precedence section的输出,有这样的例子:
// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5
我理解的行为是由于以下原因未定义:
由于x + y = y + x
口译员可以自由评估x
和y
添加任何顺序,以优化速度和/或内存。我在看完C code example in this article后得出这个结论。
我的问题是,上述的PHP代码的输出应为4
不管表达和子表达式进行求值,其方式:
- OP1 = ++ $ A => $ a = 2的,op1 = 2; op2 = $ a ++ => op2 = 2,$ a = 3; 2 + 2 = 4
- op1 = $ a ++ => op1 = 1,$ a = 2; op2 = ++ $ a => op2 = 3,$ a = 3; 1 + 3 = 4
5从哪里来?还是应该更多地了解运营商的工作方式?
编辑:
我在Incrementing/Decrementing Operators节一直盯着,但仍无法为什么5
++ $一个弄明白:预增 - 增加$一个接一个,那么返回$ a。
$ a ++:后增值 - 返回$ a,然后将$ a加1。
运行此代码时,你真的得到5印吗? – Ranty
不,我总是得到4几个版本的PHP。它是_may_这个词,意思是我可以运行这个代码一百万次获得reesult 4,但是没有_guarantee_。 –
@ H2CO3:我更感兴趣知道_为什么5_。 –