爲什麼$ x在這個表達式中是真的?在PHP中用bool表達式賦值:奇怪的行爲
$x = true and false;
我有問題,有些變量,但我可以在問題減少到原始的布爾值。
更新: 正如您在回覆中看到的效果與PHP中的運算符precedense有關。還有一個good explanation about the problem in this question,我在網上找不到,因爲我不知道我有這個問題,我不知道'& &'/'||'之間有區別,和'和'/'或'。
爲什麼$ x在這個表達式中是真的?在PHP中用bool表達式賦值:奇怪的行爲
$x = true and false;
我有問題,有些變量,但我可以在問題減少到原始的布爾值。
更新: 正如您在回覆中看到的效果與PHP中的運算符precedense有關。還有一個good explanation about the problem in this question,我在網上找不到,因爲我不知道我有這個問題,我不知道'& &'/'||'之間有區別,和'和'/'或'。
經過一番搜索,我發現這是由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),因此不需要大括號。
更多內容:
$x = true and false;
因此,我們有以下。如果你猜$x
是真的,你會是對的。由於=
比and
有更高的先例。
重寫表達上述這將是等於這個:
($x = true) and false;
在此處,它變得有趣。
如果你做的事:
$x = true && false;
,你猜那$x
是真的,你就錯了。在這種情況下,$x
實際上是錯誤的。
上述表達式實際上等於:
$x = (true and false);
爲什麼呢?因爲&&
比and
有更高的先例。
所以基本上[this](http://php.net/manual/en/language.operators.precedence.php)。 – 2015-03-13 13:04:54
@AndreiP。是。我花了一段時間才發現,因爲我正在考慮Java ... – robsch 2015-03-13 13:07:42
你發佈這個問題之前你知道答案嗎?兩者都有相同的時間戳。 – 2015-03-13 13:13:16