如何在PHP中使用isset()


How to use isset() in PHP

我试过这个代码:

<?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文章,了解两者之间的区别。