PHP中逻辑或||和位运算符或的区别和使用注意事项

先贴代码:

    $a = 0;
    $b = 0;
    if($a=3||$b=3)
    {
        var_dump($a);
        $a++;
        $b++;
        var_dump($a);
    }
    echo $a.",".$b."
";
    
    $a=0;
    $b=0;
    if($a=3|$b=3)
    {
        var_dump($a);
        $a++;
        $b++;
        var_dump($a);
    }
    echo $a.",".$b."
";
?>

输出结果:

bool(true) bool(true) 1,1
int(3) int(4) 4,4

现象解释:

第一种情况下|| 运算符的优先级大于赋值赋值运算符,因此先进行逻辑或运算且PHP是若数据类型的语言,逻辑或要求左右两端的数据类型是布尔类型,因此此处的$a和$b在经过||逻辑或运算之后变成了布尔类型,布尔类型真为1,假为0,最后输出的值是布尔值1。

第二种情况下|运算符进行的位运算,将两端的int型变量转变成二进制数据,对每一个二进制位进行或运算,此处的到111,非零值,if成功,然后对int类型进行自增运算,因此输出的是整形4。

总结:运算符是否能改变当前的变量的类型是关键。

补充:

代码:

    $a = 0;
    $b = 0;
    if($a=3||$b=3)
    {
        var_dump($a);
        $a++;
        $b++;
        var_dump($a);
    }
    echo $a.",".$b."
";
    
    $a=0;
    $b=0;
    if(($a=3)||($b=3))
    {
        var_dump($a);
        $a++;
        $b++;
        var_dump($a);
    }
    echo $a.",".$b."
";
?>

运行结果:

bool(true) bool(true) 1,1
int(3) int(4) 4,1

为验证是||运算符的优先级大于赋值运算符而将变量的类型更改,此处给赋值表达式添加括号提高优先级,那么先进行赋值运算再进行逻辑与运算,if判断执行步骤是$a=3执行,表达式执行正确则返回1,或运算符短路,直接进入if内部,因此此处的类型都没有改变。


你可能感兴趣的:(PHP中逻辑或||和位运算符或的区别和使用注意事项)