使用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 );
}
答案 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)
它测试“非虚假” 人们可以把它等同于:
if (!isset($var) || $var == false)
值得注意的是,它会检查dynamic type conversion。在您的示例中哪些可能有意义,例如空字符串,或"0"
,甚至"0 sheep"
可能无法生成有用的分支名称。
因此,它通常非常适合表单输入,并解释了isset
检查后的用法。然而,另一个常见习语是strlen()
或甚至strlen(trim($var))
来测试当前输入文本。