我现在正在阅读“Head First PHP& MySQL”一书,本书的很多部分都有用于处理HTML表单的代码片段。他们这样开始:
if (isset($_POST['submit'])){
...
}
if子句用于检测表单是否已经提交。习惯于在C中编程,我发现构造冗余且烦人(我也认为它不会帮助有经验的程序员编写可读性)。我宁愿把它写成:
if ($_POST['submit']){
...
}
问题:在此上下文中是否还有其他原因要使用isset()我可能会丢失?我的代码片段是否会被视为非惯用PHP?那么在其他情况下,你能举例说明isset()何时可能有用?
答案 0 :(得分:9)
在某些情况下,变量为NULL
,0
或FALSE
。他们未通过if() {}
比较,但他们 设置。
如果您的error_reporting设置包含isset()
s,则使用E_NOTICE
也可以避免发出有关未定义变量的通知。
答案 1 :(得分:2)
有关isset()
的更多信息,请查看此页面答案 2 :(得分:1)
好吧,如果$_SERVER
没有submit
键,第二个块会抛出E_NOTICE
( Undefined index ),因此你应该使用isset()
如果您想检查该密钥是否存在且不为空(或者array_key_exists()
,只检查是否存在)。
此外,如果您还想检查变量的内容(例如,如果设置为false
或0
),我建议您使用!empty()
(注意!
)函数的否定而不是isset()
。
答案 3 :(得分:1)
我能想到的最大原因之一是PHP的error_reporting和display_errors设置。
假设error_reporting设置为E_ALL
并且display_errors
已开启。
如果您尝试执行以下操作:if ($array['iDontExist'] == false)
代码将按预期运行,因为未设置变量,它将评估为布尔值false。然而,副作用是PHP将发出通知,说变量$array['iDontExist']
不存在。您拥有的越多,随机通知就越有可能在整个输出中被垃圾邮件发送。
我发现很多生产系统都启用了错误报告,这会导致这种不必要的行为。如果关闭display_errors,消息将不会显示在浏览器中,但如果error_reporting设置为跟踪通知,则error_log
将包含有关未定义变量的所有通知,这也是一个烦恼。