2013-03-07 62 views
1

我遇到了一個奇怪的錯誤在PHP 5.4.3PHP怪異的行爲:或真或假返回false

var_dump(false OR true); // boolean true // OK 

$a = false OR true; 
var_dump($a); // boolean false // !!???? 

$a = true OR false; 
var_dump($a); // boolean true // OK 

$a = false || true; 
var_dump($a); // boolean true // OK 

有誰知道第二個結果是怎麼來了!?

謝謝:)

+0

在http://stackoverflow.com/questions/3414504已經討論/ the-strange-ways-of-the-in-php – 2013-03-07 17:24:57

回答

7

orandprecedence然後=

這實際上是:

($a = false) OR true; 
($a = true) OR false; 
$a = (false || true); 

注意,這是人們傾向於使用or die()結構(這真的,真的,真的應該or trigger_error()的,die的對錯誤的原因有代碼沒有地方):如果左手指派的結果(在此例中爲$a中的結果值)爲false,請執行右手邊。

比較:

$a = false or print("what is going on?"); 
// prints 'what is going on?', $a === false 
$a = true or print("what is going on?"); 
// prints nothing, $a === true 
+0

哇,好的。我從來沒有想到這一點,我被告知||和OR是完全相同的運營商。我今天學到了東西,謝謝! – 2013-03-07 16:52:28

+0

上帝幫助我們。另一個PHP「功能」.. – 2013-08-03 02:03:09

+0

@ThomasW:或者你的意思是說運營商的優先順序是隻有PHP的東西? (BTw,[perl,在許多方面對PHP的啓發,也有它](http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity))。 PHP有足夠的有效問題,因此無需爲開發人員無法閱讀文檔而責怪它。 – Wrikken 2013-08-03 13:49:21

2

這就是所謂的符的優先級。

here

所以

$a = false OR true; 

相同

($a = false) OR true; 

等等