Php post / pre increment / decrement,precedence

时间:2013-06-21 14:20:22

标签: php operator-precedence

据我所知,在所有其他操作之前计算预增量,在所有操作之后计算后增量。

在php文档中,据说增量(因为我完全理解预增量)具有非常高的优先级。后增量应该具有非常低的优先级,实际上是最低的优先级。

+运算符优先级低于++一个(根据文档)。

所以,现在的问题是:在php docs中有一个例子,它表明一个表达式中的preincrement和postincrement可能会有所不同:

// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5

为什么呢? WTF?我看到以下情况非常清楚:

  1. Preincrement $ a
  2. 计算$ a和$ a
  3. 的总和
  4. 发布增量$ a
  5. 我无法理解为什么它是不可预测的。 关于这个主题(以及这个例子)的PHP文档可以在那里找到: http://www.php.net/manual/en/language.operators.precedence.php

1 个答案:

答案 0 :(得分:0)

它始终会产生4,因为最后$a正在使用Post-increment来生成5,然后像第一个Pre-increment一样使用$a }

$a = 1;
echo ++ $a +  $a++; // 4

并且

$a = 1;
echo ++ $a + ++ $a; //  5

Incrementing/Decrementing Operators