2015-01-09 44 views
-2
$A = True; 
$B = False; 
$C = $A AND $B; 
$D = $A && $B; 

echo 'C='.$C.'<br/>'; 
echo 'D='.$D.'<br/>'; 

輸出:
C = 1
d ='&&', '與' 是PHP不同

還是我失去了一些東西?

+0

它們也有不同的優先級。檢查[文檔頁面](http://php.net/manual/en/language.operators.precedence.php) – axiac

回答

7

AND具有較低的優先級。

$C = $A AND $B將被解析爲($C = $A) AND $B

-1

D是正確的輸出。

PHP不會回顯錯誤的值,但如果您確實var_dump($D);那麼您應該看到值爲false

嘗試執行布爾操作時,應該使用&&

+0

您不能將字符串連接到vardup。它什麼都不返回。 – Forien

+0

更正了,我們忘記了那些愚蠢的事情之一。它仍然打印,它只是沒有秩序。 – Varedis

+0

PHP _does_回顯falsy值,你只是沒有看到它。如果'false'(或'null')被轉換爲一個字符串,結果是一個空字符串('var_dump((string)false);') –

0

如果你想測試邏輯值的使用var_dump()。像這樣:

$a = true; 
$b = false; 

echo '<pre>'; 
var_dump($a AND $b); 
echo PHP_EOL; 
var_dump($a && $b); 
echo '</pre>' 
1

對於變量$ a和$ b組如下:

<?php 

$a = 7; 
$b = 0; 

使用AND的優點在於,發生在如下代碼短路評價:

$c = $a AND $b; 
var_dump($c); // 7 

由於賦值運算符的優先級高於AND,所以$ a的值被賦值給$ c; $ b會被跳過。

考慮對比下面的代碼:

<?php 

$c = $a && $b; 
var_dump($c); // (bool) false 

在這個片段中,&&比賦值運算符的優先級高,並給出了$ a是非零值,不存在短路。邏輯「與」的結果基於對的評估 $ a和$ b。 $ a評估爲真,$ b爲假。表達式的整體值false是分配給$ c的值。這個結果與之前的例子完全不同。

+0

好吧,我明白了。 我沒有看到排序操作符包含在短路中。 謝謝所有回答,案件已結案。 – hehe