stackoverflowでは、この問題が常に発生します:
- E_NOTICE?== E_DEBUG、より洗練されたerror_handlerでisset()および@を回避
- E_NOTICEがオンのときに$ _GETのundefindインデックスをチェックしないようにPHPを設定する方法は?
- PHPがPHP Noticeエラーを記録しないようにする方法
- このようなPHP 5.3通知をオフにするにはどうすればよいですか?
でもペッカ(固体PHPのアドバイスの多くを提供しています)恐ろしい突き当てたE_NOTICE
モンスターと望んで使用するよりも、よりよい解決策のためにisset()
:ISSET()と醜い空()メイクコード
個人的には、アプリケーションのフローを管理するために多くの場所で使用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開発者は怠け者ですか?(ペッカ、あなたのことを言っているのではなく、古いアプリケーションをリファクタリングしていることを知っています。)または、他の言語は未定義の変数を、プログラマが定義済みかどうかを最初に確認するよりも優雅に処理しますか?
(E_NOTICE
未定義の変数以外にも他のメッセージがあることは知っていますが、それらは最も悔しさを引き起こすもののようです)
補遺
これまでの回答から、isset()
コードの肥大化はないと考えているのは私だけではありません。だから、私は今、これをエコーする他の言語のプログラマーに問題があるのだろうか?または、これは単にPHPの文化の問題ですか?