【发布时间】:2013-06-18 17:23:13
【问题描述】:
据我所知,预增量是在所有其他操作之前计算的,后增量是在所有操作之后计算的。
在 php 文档中,据说增量(我完全理解为预增量)具有非常高的优先级。后增量应该具有非常低的优先级,实际上是最低的优先级。
+ 运算符的优先级比++ 低得多(根据文档)。
所以,现在的问题是:在 php 文档中有一个示例,表明一个表达式中的前置增量和后置增量可以变化:
// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5
为什么?怎么回事?我看到以下情况,很清楚:
- 预增量 $a
- 计算 $a 和 $a 的总和
- 后增量 $a
我不明白为什么它是不可预测的。 可以在此处找到有关此主题(以及此示例)的 PHP 文档: http://www.php.net/manual/en/language.operators.precedence.php
【问题讨论】:
-
投票重新开放。该手册讨论了一个具体现象(未定义的行为),并且 OP 询问为什么会这样,尽管所有优先级都应该很清楚。不知道这个问题有什么问题。
-
Precedence 指的是操作符是如何分组的,也就是说,如果你必须明确地使用它们(如在 Lisp 中),它说明所有括号的位置。但它没有指定操作发生的总顺序,这在涉及副作用时很重要。
-
例如:在
f1()*f2()+f3()中,优先级表示乘法在加法之前完成。但这并不意味着f1必须在f3之前调用。 -
@andrewsi、Eric Leschinski、Baba、ircmaxell、Hamza:为什么没有建设性?这是关于 php 官方文档中非常奇怪的示例的具体问题。别傻了,伙计们!