在这种情况下PHP isset()是多余的?

时间:2012-02-06 22:25:23

标签: php

我现在正在阅读“Head First PHP& MySQL”一书,本书的很多部分都有用于处理HTML表单的代码片段。他们这样开始:

if (isset($_POST['submit'])){
...
}

if子句用于检测表单是否已经提交。习惯于在C中编程,我发现构造冗余且烦人(我也认为它不会帮助有经验的程序员编写可读性)。我宁愿把它写成:

if ($_POST['submit']){
    ...
}

问题:在此上下文中是否还有其他原因要使用isset()我可能会丢失?我的代码片段是否会被视为非惯用PHP?那么在其他情况下,你能举例说明isset()何时可能有用?

4 个答案:

答案 0 :(得分:9)

在某些情况下,变量为NULL0FALSE。他们未通过if() {}比较,但他们 设置。

如果您的error_reporting设置包含isset() s,则使用E_NOTICE也可以避免发出有关未定义变量的通知。

答案 1 :(得分:2)

有关isset()

的更多信息,请查看此页面

http://php.net/manual/en/function.isset.php

答案 2 :(得分:1)

好吧,如果$_SERVER没有submit键,第二个块会抛出E_NOTICE Undefined index ),因此你应该使用isset()如果您想检查该密钥是否存在且不为空(或者array_key_exists(),只检查是否存在)。

此外,如果您还想检查变量的内容(例如,如果设置为false0),我建议您使用!empty()(注意!)函数的否定而不是isset()

答案 3 :(得分:1)

我能想到的最大原因之一是PHP的error_reportingdisplay_errors设置。

假设error_reporting设置为E_ALL并且display_errors已开启。

如果您尝试执行以下操作:if ($array['iDontExist'] == false)代码将按预期运行,因为未设置变量,它将评估为布尔值false。然而,副作用是PHP将发出通知,说变量$array['iDontExist']不存在。您拥有的越多,随机通知就越有可能在整个输出中被垃圾邮件发送。

我发现很多生产系统都启用了错误报告,这会导致这种不必要的行为。如果关闭display_errors,消息将不会显示在浏览器中,但如果error_reporting设置为跟踪通知,则error_log将包含有关未定义变量的所有通知,这也是一个烦恼。