$A = True;
$B = False;
$C = $A AND $B;
$D = $A && $B;
echo 'C='.$C.'<br/>';
echo 'D='.$D.'<br/>';
輸出:
C = 1
d ='&&', '與' 是PHP不同
還是我失去了一些東西?
$A = True;
$B = False;
$C = $A AND $B;
$D = $A && $B;
echo 'C='.$C.'<br/>';
echo 'D='.$D.'<br/>';
輸出:
C = 1
d ='&&', '與' 是PHP不同
還是我失去了一些東西?
AND
具有較低的優先級。
$C = $A AND $B
將被解析爲($C = $A) AND $B
。
都具有同樣的事情,但&&
比AND.
更多具有更高的優先級: - 'AND' vs '&&' as operator
如果你想測試邏輯值的使用var_dump()
。像這樣:
$a = true;
$b = false;
echo '<pre>';
var_dump($a AND $b);
echo PHP_EOL;
var_dump($a && $b);
echo '</pre>'
對於變量$ 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的值。這個結果與之前的例子完全不同。
好吧,我明白了。 我沒有看到排序操作符包含在短路中。 謝謝所有回答,案件已結案。 – hehe
它們也有不同的優先級。檢查[文檔頁面](http://php.net/manual/en/language.operators.precedence.php) – axiac