最近在学习 php ,学到了逻辑运算符,总结总结。
逻辑运算符用来组合逻辑运算的结果,是程序设计中一组非常重要的运算符。
PHP的逻辑运算符如下:
运算符 | 举例 | 结果为真 |
&& 或 and (逻辑与) | $a and $b 或者 $a && $b | 当$a和$b都为真时结果为true |
|| 或 or (逻辑或) | $a || $b 或者 $a or $b | 当$a为真或者$b为真时结果为true |
xor (逻辑异或) | $a xor $b | 当$a、$b 一个是真一个是假时结果为true |
! (逻辑非) | !$a | 当$a为假时结果为true |
php中的这4种逻辑运算符,如果每个单独使用没有什么问题,大家都懂,我就不多说了。
例: $a and $b和$a && $b没有任何区别。同样的$a or $b和$a || $b也完全一样。
但是如果混合使用,像这样:
例:
$i=true;
$j=true;
$z=false;
if($i or $j and $z){
echo "true";
}else{
echo "false"
}
// true
if($i || $j and $z){
echo "true";
}else{
echo "false"
}
// false
我们可以看到这两个 if 语句 除了 or 和 || 不同之外,其他完全一样。但是结果不同,那这是为什么呢?
因为这两种形式的逻辑运算符优先级不同,说白了就是运算顺序不同。就像加减乘除,是先算加减后算乘除一样。
这四个符号的优先允许从高到低是:&&、||、and、or。
所以上面这两个if语句就相当于:
$i or $j and $z => $i or ( $j and $z ) => true or ( true ) => 结果为true
$i || $j and $z => ( $i || $j ) and $z => ( true ) and false => 结果为false
如果你记不住级别,也没有关系,你可以使用括号。
例:$a and (($b != $c) or (5 * (50-$d)))