PHP
error_reporting
循環参照

[関数系] error_reportingでエラーを握り潰さないようにしようねという話

概要

error_reporting の設定を間違ってFatal Errorに気づかないこともあるので、
本当に設定には気をつけましょうねという話。

内容

アクセスなどが多いサービスになってくると、エラーレポートの中身をerror_reportingしないようにする場合も存在するが、開発時のデバッグの時には必ずE_ALLにして検証した方が良い。

理由

理由1

PHPはスクリプト言語であるため、エラーの内容がNOTICEであっても動作しないということがありうる。

理由2

同じ箇所を2箇所で利用しているような場合は、依存関係がごちゃごちゃになっていると、一つでは動作するものの、もう一つの利用箇所においては動作しないということも起こりうる。

落とし穴

  1. error_reporting の初期値は E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED→初期値にNoticeが含まれていない

バージョンによる error_reporting のデフォルト値

バージョン デフォルト値 意味
PHP 5.3 以降 E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED NOTICE, DEPRECATED, STRICT以外は全てのエラーを表示
PHP 5.3.0 以前 E_ALL & ~E_NOTICE & ~E_STRICT NOTICE, STRICT以外のエラーは全て表示
PHP 4 E_ALL & ~E_NOTICE NOTICE以外のデータは全て表示

落とし穴に対する対処

開発中はできればNoticeエラーをonにする(or E_ALLのみとしておく)ことで、Noticeも含めてエラーは積極的に潰していくこと

まとめ

E_ALLで動作検証をしよう。(当たり前なのかもしれませんが、自戒を含め)
依存されている箇所は検証しようね。

参考

改めてphpのerror_reportingは心もとないなと感じた
実行時設定 - php.net
error_reporting - php.net