开发者社区> 问答> 正文

下面的php代码的输出问题,求教。

$a=3;
$b=6;
$c=1;
if($a=5||$b=7 && $c=10){
    var_dump($a, $b,$c);//bool(true) int(6) int(1)
    $a++;
    $b++;
}
var_dump($a, $b,$c);//bool(true) int(7) int(1) 

请问为什么会这样输出?

展开
收起
落地花开啦 2016-06-15 10:35:19 1816 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    这个并不是PHP的BUG,而是你自己没有好好理解运算符的优先级的问题,建议看看这个:运算符优先级、逻辑运算符
    把你的那个判断加上括号,那么你可以这么理解这个逻辑判断
    $a = ( 5 || ( ( $b = 7 ) && ( $c = 10 ) ) )
    你可以把括号加上放到程序中测试,结果也还是一样的。从上面我们就可以看出,由于=的优先级是最低的,所以先执行了( 5 || ( ( $b = 7 ) && ( $c = 10 ) ) )。由于||和&&的操作符是同级的,所以从左到右进行操作,5这个数字被程序判断为true。
    根据或操作原则。二者中只要有一者判断为true则立即结束判断,所以或操作后面的都不执行了。最后将true赋值给$a变量。这就是为什么只有$a变量的值变了,而$b和$c没变的原因。

    2019-07-17 19:38:49
    赞同 展开评论 打赏
问答分类:
PHP
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-深入浅出网络编程与swoole内核-吴镇宇 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载