5

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

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

但在 php

相同的语句将给出 12?!

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

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

4

5 回答 5

7
于 2012-07-11T12:53:16.007 回答
7

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

是的,它可能被认为是错误的,但它是 PHP。请参阅此“不是错误”错误报告

于 2012-07-11T12:48:38.710 回答
4

根据Operator Precedence上的文档:

// 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。

于 2012-07-11T12:54:36.370 回答
2

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

于 2012-07-11T12:50:22.057 回答
1

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)

区别在于我认为。

于 2012-07-11T13:15:22.067 回答