浅谈php中&&/and、||/or中的坑

在逻辑运算符中,提到与和或,我们可能立刻想到的是&&、||,在php中还有and、or.然而and和or中有一个小小的坑,请看下面这段代码:

<?php

    $a = true;
    $b = false;

    $c1 = $a && $b;
    var_dump($c1); //1.false

    $c2 = $a and $b;
    var_dump($c2); //2.true

    $c3 = $b and $a;
    var_dump($c3); //3.false

    $c4 = $a or $b;
    var_dump($c4); //true

    $c5 = $b or $a;
    var_dump($c5); //false
?>

1处打印的结果为false不用多讲,2处打印的是true可能让我们困惑,当你看到3处打印的结果后可能更加困惑,哈哈
出现这种现象的原因在于优先级,and 、or的优先级很低,比=号还低,拿2来说:
由于and的优先级低于=,那么
$c2 = $a and $b; 等价于 ($c2 = $a) and $b;
$c2先是被赋值为true,然后和$b进行或运算,由于\$c2 和\$b进行或运算的结果并没有赋值给其他变量,所以运算的结果并没有保存下来,所以整个表达式运算的结果仍是true。
我们在使用逻辑运算符and、or时应小心其优先级,否则可能会出现错误。

猜你喜欢

转载自blog.csdn.net/qq_38253837/article/details/79139587