我尝试了这段代码:
<?php
if(isset($a) && ($a ==4)) echo "$a ==4";
?>
我很惊讶我没有收到错误,因为$ a未定义。我以为需要写
<?php
if(isset($a))
if($a == 4) echo "$a == 4";
?>
如果同时检查isset($a)
和($a ==4)
,为什么第一个版本不会出错?使用短代码if(isset($a) && ($a ==4))
时有什么不利之处吗?我不相信它,但是当需要其他分支时它变得非常方便。
答案 0 :(得分:7)
PHP从左到右检查您的if
条件。 isset()
会返回false
,因此它不会检查($a == 4)
它是否会中止if并继续播放脚本。
如果我们反过来这样做:
if(($a ==4) && isset($a)) echo "$a ==4";
这将返回未定义的通知。
答案 1 :(得分:4)
这与&&
运算符有关。
它的作用是首先检查第一个运算符:如果它是false,则它在那里退出条件,而不评估第二个条件,因为整个条件已经为假。因此,第二个条件永远不会抛出错误,因为它没有被评估。
这与&
运算符形成对比,后者首先计算两个表达式并产生错误。
请参阅this SO post了解两者之间的差异。