PHP中的预增量和后增量

以下语句的结果应该给出9 :(使用java或js或c ++)

i = 1; i += ++i + i++ + ++i; //i = 9 now 

但在PHP中

同样的陈述会给12?

 $i = 1; $i += ++$i + $i++ + ++$i; echo $i; 

这是一个错误还是任何人都可以解释为什么?

答案是“因为它是PHP”。 并且PHP不保证这种类型的语句(顺便说一下,C也没有)。

是的,它可能被认为是错误的,但它是PHP。 看到这个“不是bug”错误报告 。

在这里查看类似的示例。

基本上这是发生的事情:

首先评估++$i$i现在是2。
$i += 2 + $i++ + ++$i;

接下来,评估$i++$i现在是3。
$i += 2 + 2 + ++$i;

接下来,评估++$i$i现在是4。
$i += 2 + 2 + 4;

最后计算总和:
$i = 4 + 2 + 2 + 4 = 12

根据运算符优先级的文档:

 // mixing ++ and + produces undefined behavior $a = 1; echo ++$a + $a++; // may print 4 or 5 

所以我猜测发生了什么:

 $i += ++$i + $i++ + ++$i; 

获取翻译成

 $i = (++$i + $i++ + ++$i) + $i; 

在这种情况下,它将加起来12。

这些增量的订单无法保证。 为什么写代码含糊不清?

Java,JS或C ++就像这样评估这个等式;

 i = 1; i += ++i + i++ + ++i; --> i = i* + ++i + i++ + ++i (i* is 1 all the time) 

但在PHP中:

 $i = 1; $i += ++$i + $i++ + ++$i; --> $i = $i* + ++$i + $i++ + ++$i ($i* is calculated after increments, in your situation $i* is 4) 

差异在于我的想法。