2013-06-21 55 views
1

據我所知,preincrement是在所有其他操作之前計算的,postincrement是在所有操作之後計算的。Php post/pre increment/decrement,precedence

在php文檔中,據說增量(正如我理解的那樣)具有很高的優先級。後增量應該具有非常低的優先級,實際上是最低的。

+運算符優先級低於++(根據文檔)。

所以,現在的問題是:在PHP文檔有一個例子,表明增量和後增量在一個表達式可以改變:

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

爲什麼? WTF?我看到下面的情形的這是很清楚的:

  1. 預遞增美元
  2. 計算總和$和$一個
  3. 後增量美元

我不明白爲什麼它是不可預知的。關於這方面的 PHP文件(也本示例)可以在那裏找到: http://www.php.net/manual/en/language.operators.precedence.php

+1

[它總是會產生'4'](http://3v4l.org/iQdFp) – Baba

+0

是相同的代碼,給出不同的輸出隨機?您列出的代碼將始終打印4,據我所知。不應該有任何不一致 – Stephan

+1

投票重新打開。手冊談到了一個具體的現象(未定義的行爲),並且OP在問爲什麼這是即使所有的優先級都應該很清楚。不知道這個問題有什麼問題。 – deceze

回答

0

因爲最後$a使用Post-increment它總是會產生4它產生5然後使用Pre-increment像第一$a

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

而且

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

Incrementing/Decrementing Operators

+0

可能重複我完全同意你的看法。但我的問題是關於文檔。我不能在PHP文檔中的示例:(這是無效的。 – avasin