2014-09-27 73 views
-1

许多PHP开发人员编写以下条件语句:PHP代码中是否有冗余条件?

if (isset($_POST['action']) and $_POST['action'] == 'someValue') { 
    something(); 
} 

这是什么有用的写这个条件语句?

当我看着它,它看来,如果$_POST['action'] == 'someValue' 意味着isset($_POST['action'] == TRUE

所以,似乎下面的条件语句会做同样的:

if ($_POST['action'] == 'someValue') { 
     something(); 
} 
+0

如果未设置$ _POST ['action'],它会在错误日志中写入警告.check isset将避免产生该警告 – 2014-09-27 15:50:32

+0

您将通过第二种方法获得未声明的变量警告 – bansi 2014-09-27 15:51:42

回答

1

如果您只要致电:

if ($_POST['action'] == 'someValue') { 
    something(); 
} 

$_POST["action"]没有设置,那么默认的PHP行为是抱怨undefined index,这将导致direct string output。 现在考虑如果你的PHP请求是关于发送一个JSON回客户端......你的JSON将是一个malformed one

另一个问题,考虑以下因素:

if ($_POST['action'] == 'someValue') { 
    something(); 
} 
... 
header("Location: foo.php"); 

对不起,由于您的通知没有机会约undefined index preceed头,这是一个没有没有。它不起作用,因为PHP的默认行为(考虑错误报告为ON)是以字符串格式吐出警告,从而混淆了脚本的流程。

当然,你可以沉默这些错误本:

if (@$_POST['action'] == 'someValue') { 
    something(); 
} 

但这同样是一个不好的做法,它不使节目更好,但速度较慢,难以发现错误。

1

PHP发出通知,如果使用未定义的变量或指数。

该检查是为了防止它。

1

如果数组中的某个键不存在,PHP将触发一条关于访问它的通知。所以这不是多余的,但它取决于您的设置,如果通知显示。