我试过这个代码:
<?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))
有什么缺点吗?我不信任它,但当需要其他分支时,它会变得非常方便。
PHP从左到右检查if
条件。isset()
返回false
,所以它不检查($a == 4)
,它中止if并继续脚本。
如果我们反过来做:
if(($a ==4) && isset($a)) echo "$a ==4";
这将返回一个未定义的通知。
这与&&
运算符有关。
它所做的是首先检查第一个运算符:如果它是false,那么它立即退出条件,而不评估第二个条件,因为整个条件已经是false了。因此,第二个条件从不抛出错误,因为它没有被求值。
这与&
运算符形成对比,后者首先计算两个表达式,并会产生错误。
请参阅这篇SO文章,了解两者之间的区别。