Java PHP中的增量前和增量后

Java PHP中的增量前和增量后,java,php,javascript,Java,Php,Javascript,下面语句的结果应该是9:(使用java、js或c++) 但是在php中 同样的陈述会给出12个 $i = 1; $i += ++$i + $i++ + ++$i; echo $i; 这是一个bug还是有人能解释原因?答案是“因为它是PHP”。PHP也不保证这种类型的语句(顺便说一句,C也不保证) 是的,它可能被认为是错误的,但它是PHP。请参阅。无法保证这些增量的顺序。为什么要编写模棱两可的代码?寻找类似的示例 基本上是这样的: 首先计算+$i$i现在是2。 $i+=2+$i++++$i 接

下面语句的结果应该是9:(使用java、js或c++)

但是在php中

同样的陈述会给出12个

$i = 1;
$i +=  ++$i + $i++ + ++$i;
echo $i;
这是一个bug还是有人能解释原因?

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


是的,它可能被认为是错误的,但它是PHP。请参阅。

无法保证这些增量的顺序。为什么要编写模棱两可的代码?

寻找类似的示例

基本上是这样的:

首先计算
+$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

根据以下文件:

所以我猜现在发生的是:

$i +=  ++$i + $i++ + ++$i;
被翻译成

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

总计达12。< / P> < P> java、JS或C++对该方程进行了评价;p>
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)

不同之处在于我认为。

这并不含糊。运行一百万次,我保证你会得到同样的结果。它有一个很好定义的增量顺序,只是不清楚这个顺序是什么。。。因此是模棱两可的——从一开始就不清楚正在做什么。为什么要编写一开始就不明显的代码来说明实现了什么@Thor84no-作为一个维护代码的人,回到这个代码上来,试着找出哪里出了问题。不要把“模棱两可”和“不可重现”混为一谈。当然,可以使用相同的PHP实现重现结果。然而,这仍然是模棱两可的,因为语言规范没有定义PHP处理器如何处理它,所以这取决于PHP.btw的实现者。很好的解释,但我知道它是如何计算的,但问题是为什么!。我认为我们不能依靠PHP来完成这样的操作this@Ahmad不要这样写代码,你会没事的。@Ahmad:“为什么”是一个很难回答的问题,除了他们选择那样实现它之外。
i = 1;

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

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