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