PHP代码中的冗余条件与否?

时间:2014-09-27 15:47:34

标签: php conditional-statements logical-operators isset

许多PHP开发人员编写以下条件语句:

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

编写此条件语句有什么用处?

当我看到它时,似乎$_POST['action'] == 'someValue' 暗示isset($_POST['action'] == TRUE

因此,以下条件语句似乎也会这样做:

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

3 个答案:

答案 0 :(得分:1)

如果使用未定义的变量或索引,PHP会发出通知。

该检查是为了防止它。

答案 1 :(得分:1)

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

答案 2 :(得分: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的通知,这是不可能的。它不起作用,因为PHP的默认行为(考虑错误报告为ON)是以字符串格式吐出警告,从而弄乱了脚本的流程。

当然,你可以用这个来解决这些错误:

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

但这是一个同样糟糕的做法,它不会使程序更好,但更慢,更难捕捉到错误。