回答

3

經過一番搜索,我發現這是由operator precedence in PHP.引起的'='運算符比'and'更強。

如果你想讓你必須使用括號預期的結果:

$x = (true and false); //correct: $x is false now! 

如果沒有括號中的表達式等於($x = true) and false;。 $ x將獲得'真正'的價值。之後,PHP解釋器用$ x剛剛獲得的值「替換」此賦值。所以true and false;仍然存在。而這沒有任何作用。 '假'丟失,並沒有影響表達。

請注意,如果您使用'& &'或'||',則不需要大括號!它們比「=」更強,因此比「和」和「或」更強。奇怪...

這與例如$x = 5 + 6;因爲這裏'+'比'='強,它會首先被解決。最後,它隻影響布爾運算符'和','或'和'xor'。只有與他們在一起,你必須小心。

還請注意,與JavaScript或Java等其他語言相比,這是不同的。在這些語言中,由於邏輯運算符強於等號運算符(Operators in JavaScript,Operators in Java),因此不需要大括號。

+0

所以基本上[this](http://php.net/manual/en/language.operators.precedence.php)。 – 2015-03-13 13:04:54

+0

@AndreiP。是。我花了一段時間才發現,因爲我正在考慮Java ... – robsch 2015-03-13 13:07:42

+0

你發佈這個問題之前你知道答案嗎?兩者都有相同的時間戳。 – 2015-03-13 13:13:16

0

更多內容:

$x = true and false; 

因此,我們有以下。如果你猜$x是真的,你會是對的。由於=and有更高的先例。

重寫表達上述這將是等於這個:

($x = true) and false; 

在此處,它變得有趣。

如果你做的事:

$x = true && false; 

,你猜那$x是真的,你就錯了。在這種情況下,$x實際上是錯誤的。

上述表達式實際上等於:

$x = (true and false); 

爲什麼呢?因爲&&and有更高的先例。