8

php手册声称:

$a = 1;
echo ++$a + $a++;

在它的语法下是模棱两可的,但对我来说似乎非常清楚。++$a 和 $a++ 首先计算,从左到右,所以 ++$a 递增然后返回 2,$a++ 返回 2 然后递增。2 + 2 的总和是 4,所以它会回显 4。但是,PHP 手册非常清楚地说明它可能会打印 4 或 5。

php规范是否没有指定将从左到右执行操作?

即使它不强制从左到右执行操作,在这种情况下,它不会返回 4 无论如何?

编辑:我重新阅读了该页面,并指出它是由每个特定的运营商确定的。+ 的优先级最低,并且从左到右进行评估,所以我之前的假设似乎是正确的。我还是不明白。

4

2 回答 2

5

++$a设为$a2,返回 2, 再次$a++递增,现在是 3,但它返回 2。$a$a

在相同的 PHP 版本中,结果总是相同的。但如果 PHP 版本发生变化,可能会产生不同的结果。它取决于++$a$a++,首先评估哪个。如果$a++先求值,则结果为 5,否则结果为 4。

于 2012-04-05T01:40:47.957 回答
3

请注意,这只是我的拙见。

我认为这个结果背后的想法是,当只有一个运算符时,没有一个附加数具有优先权,并且在一个操作中,一个变量被保留作为参考,而不是在所有计算过程中被它的结果替换,直到最后一个(加上,在这个例子中)。所以当它来自 lr 时:

$a = 1;
++$a + $a++
operand 1 --> ++$a ==> $a = ++1 = 2
result (where $a = 2) --> 2 + (2++) = 4

否则:

$a = 1;
++$a + $a++
operand 2 --> $a++ ==> $a = 1
// new operation on the left side
// so the value gets incremented ==> $a = 2
result (where $a = 2) --> (++2) + 2 = 5

不过,我不确定这一点。

于 2012-04-05T03:08:06.437 回答