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)
差异在于我的想法。