关于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值,

小贴士:

布尔值自增自减不改变,相当于无效。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值