关于php中的||和&&短路与优先级运算

||与&&都是逻辑运算符,||运算当左边为真,则不再判断右边,&&运算当左边为假,也不必再判断右边。
例如:
$a=3;
$b=4;

if($a||$b=5)
{
    echo "tudo";
}
echo $b;    //4

前提&&,||比=优先级更高,=比and和or优先级更高。
$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


**关于奇葩的$a && $b = $c的问题**
先看几个例子

$a=0;
$b=2;
$c=3;
$a && $b =$c;
echo "a:".$a."b:".$b."c:".$c;

//a:0b:2c:3

$a=1;
$b=2;
$c=3;
$a && $b =$c;
echo "a:".$a."b:".$b."c:".$c;

//a:1b:3c:3
$a=1;
$b=0;
$c=3;
$a && $b =$c;
echo "a:".$a."b:".$b."c:".$c;

这是为什么呐?首先运算级肯定是&&比=更高,但在php中对这个$a && $b =$c问题,它的处理是$a&&($b=&c),也就是说$a为假,后面的就不运算了,例如上面第一个,如果为真则继续计算。也可以简单理解为

if($a){

$b = $c;

}
还有一种$a=$b&&$c=$d;
$a=1;
$b=2;
$c=3;
$d=5
$a=$b&&$c=$d;
var_dump($a,b);         //bool(true) int(2)
var_dump($c,$d);       // int(5) int(5)

其实它就相当于$a=($b&&($c=$d))

道理跟前面的$b&&$c=$d;相同,只是在运算中将右边作为表达式赋给了$a,所以$a得值只能是bool值,

附表:优先级表

关于php中的||和&&短路与优先级运算

小贴士:

布尔值自增自减不改变,相当于无效。
————————————————
版权声明:本文为****博主「IT一哥小白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.****.net/Jack_mile/article/details/83303727