以下语句的结果应为 9:(使用 java 或 js 或 c++)
i = 1;
i += ++i + i++ + ++i;
//i = 9 now
但在 php
相同的语句将给出 12?!
$i = 1;
$i += ++$i + $i++ + ++$i;
echo $i;
这是一个错误还是任何人都可以解释为什么?
以下语句的结果应为 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。请参阅此“不是错误”错误报告。
根据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。
无法保证这些增量的顺序。为什么要编写模棱两可的代码?
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)
区别在于我认为。