2016-11-11 75 views
4

在PHP 7,下面的片段奇怪的打印true爲什麼我需要投這個布爾表達式?

$b = true and false; 
var_dump($b); 

但是,如果我投它,它正確打印false

$b = (bool)(true and false); 
var_dump($b); 

是什麼原因導致這種情況發生的現象?

+0

參見:http://php.net/manual/en/language.operators.precedence.php'和'的優先級低於'=',所以你基本上做的是:'($ b = true)假如你看到這個,你會看到:'var_dump($ b = true和false);' – Rizier123

回答

7

這不是演員,它是括號。 and=優先級高,所以你的第一個語句都被當作

($b = true) and false; 

你需要寫:

$b = (true and false); 

$b = true && false; 

&&and是除了它們的優先級等同(||or也是如此)。

4

這不是鑄造,但括號:

$b = (true and false); 
var_dump($b); 
# => bool(false) 

這是因爲= binds more tightly than and or or

另外,這也適用:

$b = true && false; 
var_dump($b); 
# => bool(false) 

&&||綁定比=更加緊密。

相關問題