在stackoverflow上,我一直看到这个问题:
- E_NOTICE?== E_DEBUG,避免使用更复杂的error_handler的isset()和@
- 当E_NOTICE打开时,如何设置PHP不检查$ _GET的未定义索引?
- 如何停止PHP记录PHP通知错误
- 如何关闭此类PHP 5.3声明?
甚至Pekka(提供了很多可靠的PHP建议)也碰到了可怕的E_NOTICE
怪物,并希望有一个比使用更好的解决方案isset()
:isset()和empty()使代码丑陋
就个人而言,我使用isset()
并empty()
在很多地方来管理我的应用程序的流量。例如:
public function do_something($optional_parameter = NULL) {
if (!empty($optional_parameter)) {
// do optional stuff with the contents of $optional_parameter
}
// do mandatory stuff
}
甚至像这样的简单代码段:
if (!isset($_REQUEST['form_var'])) {
// something's missing, do something about it.
}
对我来说似乎很合逻辑。它看起来不膨胀,看起来像稳定的代码。但是,许多开发人员使用E_NOTICE
启用了,从而启动了他们的应用程序,发现了许多令人沮丧的“未初始化的数组索引”通知,然后对检查已定义的变量并使用来“乱丢”其代码感到无所适从isset()
。
我认为其他语言处理问题的方式也不同。从经验来看,JavaScript不像PHP那样礼貌。未定义的变量通常会停止脚本的执行。另外,(从经验上来讲)我确定像C / C ++这样的语言只会拒绝编译。
那么,PHP开发人员只是懒惰吗?(不是在谈论您,Pekka,我知道您是在重构一个旧的应用程序。)或者其他语言是否比要求程序员首先检查它们是否已被定义更优雅地处理未定义的变量?
(我知道E_NOTICE
除了未定义的变量以外,还有其他消息,但这些消息似乎是造成最大麻烦的消息)
附录
到目前为止的答案中,我并不是唯一认为isset()
不是代码膨胀的人。所以,我现在想知道,其他语言的程序员是否有与此相呼应的问题?还是这仅仅是一个PHP文化问题?