$A = True;
$B = False;
$C = $A AND $B;
$D = $A && $B;
echo 'C='.$C.'<br/>';
echo 'D='.$D.'<br/>';
输出:C=1
D=
还是我错过了什么?
AND
的优先级较低。
$C = $A AND $B
将被解析为 ($C = $A) AND $B
。
对于变量$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 的值不为零,因此不存在短路。此逻辑 AND 的结果基于对$a和$b的评估。 $a评估为真,$b评估为假。表达式的总体值 false 是分配给$c的值。 此结果与前面的示例完全不同。
两者都
有相同的东西,但&&
的优先级高于AND.
有关更多信息:- "AND"与"&&"作为运算符
如果要测试逻辑值,请使用var_dump()
。喜欢这个:
$a = true;
$b = false;
echo '<pre>';
var_dump($a AND $b);
echo PHP_EOL;
var_dump($a && $b);
echo '</pre>'
D 是正确的输出。
PHP 不会回显错误值,但如果你var_dump($D);
,那么你应该看到该值是false
。
尝试执行布尔运算时应使用 &&
。