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

PHP isset()在这种情况下是多余的吗?,php,Php,我现在正在阅读“headfirstphp&MySQL”一书,书中的许多部分都有用于处理HTML表单的代码片段。他们是这样开始的: if (isset($_POST['submit'])){ ... } if子句用于检测表单是否已提交。由于习惯了用C语言编程,我发现这种构造是多余的,而且很烦人(而且我也不认为它对有经验的程序员来说有助于提高代码的可读性)。我宁愿这样写: if ($_POST['submit']){ ... } 问题:在这种情况下使用isset()是否还有我可能遗漏的其

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

if (isset($_POST['submit'])){
...
}
if子句用于检测表单是否已提交。由于习惯了用C语言编程,我发现这种构造是多余的,而且很烦人(而且我也不认为它对有经验的程序员来说有助于提高代码的可读性)。我宁愿这样写:

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

问题:在这种情况下使用isset()是否还有我可能遗漏的其他原因?我的代码片段版本会被认为是非惯用PHP吗?在其他上下文中,您能给我一个isset()何时有用的示例吗?

在某些情况下,变量为
NULL
0
FALSE
。如果()


如果您的错误报告设置包括
E\u notice
s,则使用
isset()
也可以避免有关未定义变量的通知。

有关isset()的更多信息,请查看此页面


好的,如果
$\u服务器
没有
submit
键,第二个块将抛出
E\u通知
(未定义索引),因此如果要检查该键是否存在且不为空(或者,
array\u-key\u-exists()
,只需检查是否存在)


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

函数的否定。我能想到的最大原因之一是由于PHP和设置

假设错误报告设置为
E\u ALL
,并且
display\u errors
处于启用状态

如果您尝试执行以下操作:
If($array['iDontExist']==false)
代码将按预期运行,因为未设置变量,它将计算为布尔值false。但是,副作用是PHP将发出一个通知,说明变量
$array['iDontExist']
不存在。您拥有的信息越多,输出中出现垃圾邮件的可能性就越大


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

$\u服务器
?你是说
$\u POST
?@Vyktor,不错。PHP手册对isset的描述如下:“确定变量是否已设置且不为NULL”。所以在这种情况下,即使变量被设置为NULL、0或False,您也会得到0,对吗?是的,我想说的是,这样做的主要目的是避免错误日志中出现数百条X不存在的通知。如果脚本中到处都是的话,则必须对其进行打击以防止出现警告,这可能会非常令人沮丧,如图所示,你可以评估它的真实性,或者做一些疯狂的事情,比如
$var=$\u POST['var']?:false