PHPパーサ内部ではいろいろなエラーが出力されます。それらのエラーは重要度に応じていくつかの種類があります。また、ユーザが自分で発生させたエラーにも重要度をつけられます。本文ではこの重要度をエラーレベルと呼びます。エラーレベルはphp.iniでも定義できますし、error_report関数などでも設定できます。
詳細はこちら:
http://jp.php.net/error_reporting
今回は、E_NOTICEのエラーレベルを出力するか否かについて議論したいです。
E_NOTICEはすごい細かい情報を出してくれて、バグの混入リスクを下げる利点があるのに対し、PHPの利点でもあるコードの柔軟性(適当なコードでも動く)が失われてしまい、開発スピードが低下したり、コードが見づらくなってしまいます。
では、周りではどうなっているかを調査してみます。
- php-5.2.5のphp.ini-recommended
- error_reporting = E_ALL
- php-5.2.5のphp.ini-php.ini-dist
- error_reporting = E_ALL & ~E_NOTICE
- はてなーのみなさん
- 多い方が、「E_NOTICEを出していない」

- Unohラボは出してる見たい
- http://labs.unoh.net/2006/11/e_notice.html
- なんかばんざい(E_NOTICEを出すのに反対しているみたい)
- http://tt25.org/blog/20080510/php-e-notice
次に、E_NOTICEを出したときの利点と欠点を整理します。
- 利点
- 欠点
- 定義されていないhashのキーを参照するとエラーになってしまう。定義されているかわからないキーを使うときには、変数へアクセスするためのwrapperが必要になるだろう。
(追記があったら教えて下さい)
上記の反論:
未定義変数の発見→PHPEclipseなどのエディタを使うことで発見できるから、コンパイラでチェックしなくてもいい。
まとめ:いまのところ、E_NOTICEを出力する決定的な強みはないのでプロジェクトの好みで使えばいいと思う。
考察:E_NOTICEの回避方のノウハウなどがほとんど無いから、一般ではあんまり使われて無いだろうなぁ。PHPのデフォルトでもE_NOTICEは無効になっているし。