为什么检查$ _GET变量是否为空两次?

时间:2014-11-10 23:35:12

标签: php is-empty

使用PHP一些代码,我遇到了一些基本上检查相同变量是否为空的代码:

if ( !empty( $_GET[ 'branch' ] ) ) {
    $branch = $_GET[ 'branch' ];
}
if ( empty( $branch ) ) {
    _output( 'Error: no branch specified!' );
    exit( 1 );
}

知道为什么会这样设置吗?与仅使用else相比,有什么优势:

if ( !empty( $_GET[ 'branch' ] ) ) {
    $branch = $_GET[ 'branch' ];
} else {
    _output( 'Error: no branch specified!' );
    exit( 1 );
}

3 个答案:

答案 0 :(得分:7)

不检查相同的变量是否为空。此代码中$branch不一定是$_GET['branch'],第一项检查是检查$_GET['branch'] 是否为空。

在整个代码中,很可能至少有一个$branch被设置的其他条件。这很可能是最后一个条件,因此最终检查是否设置了$branch。可能有更好的方法来解决这个问题,但没有看到整个代码,我无法告诉你。


根据您在下面的评论,这是相同的事情,甚至更简单:

$branch = $_GET[ 'branch' ];
if ( empty( $branch ) ) {
    _output( 'Error: no branch specified!' );
    exit( 1 );
}

如果$_GET['branch'] $branch只能是$_GET['branch'],为什么在$branch = (empty($_GET['branch'])) ? DEFAULT_BRANCH : $_GET['branch']; 上使用if呢?

更好的是,您可以使用三元运算符来设置默认分支并避免出错。

{{1}}

答案 1 :(得分:0)

可能存在分支设置的另一种方式,并且稍后将在代码中设置分支。第一个if检查$ _GET是否为空,顺便说一句。

没有理由以这种方式进行此类检查。像这样它看起来有点像这样的代码:

for ($x=0;$x<2;$x++)
  {
    if ($x>0)
     {
       $x=0;
     }
  }

答案 2 :(得分:0)

所以empty()不仅仅是isset()的倒数。

它测试“非虚假” 人们可以把它等同于:

if (!isset($var) || $var == false)

值得注意的是,它会检查dynamic type conversion。在您的示例中哪些可能有意义,例如空字符串,或"0",甚至"0 sheep"可能无法生成有用的分支名称。

因此,它通常非常适合表单输入,并解释了isset检查后的用法。然而,另一个常见习语是strlen()或甚至strlen(trim($var))来测试当前输入文本。