いつクリはてブロ

いつになったらクリエイティブするの?

PHP5.4からはエラーレベルE_STRICTがE_ALLに含まれている

php.iniの設定項目の1つとしてerror_reportingがある。これは出力するエラーメッセージの段階(レベル)を指定するためのものである。
デフォルトでは以下のように設定されている。

error_reporting = E_ALL & ~E_NOTICE

エラーレベルについては以下を参照。
PHPマニュアル: errorfunc関数の定義済み定数
HTML上に直接エラーメッセージを表示させたりしている場合、それが原因でうまく動かないことがある。で、PHP4のスクリプトをそのままPHP5に持ってくると、「多分こうしたいんだろうからそうしておくけどホントはこうやって書いて欲しいな?」みたいなエラーがよく出る。特に良く出ると思われるものがレベルE_STRICTである。

Strict Standards: Non-static method DB::connect() should not be called statically in ...

こういうの。

別のサーバーで動かしていたものをそのまま持ってきて違うサーバーで動かそうとしたらこれが出てきたので、消そうと思って調べた結果、E_STRICTはE_ALLに含まれていないということで、デフォルト設定のままでいいことが分かった。あれ? でも表示されてるぞ? と思って小一時間右往左往した結果。
f:id:vivit_jc:20130213025759p:plain
f:id:vivit_jc:20130213030106j:plain

PHP5.4からはE_ALLにE_STRICTが含まれているので除外しなければならない。

error_reporting = E_ALL & ~E_STRICT

マシンに入ってる言語とかのバージョン違いでうまく動かないのは一番嫌いなタイプの不具合。
しかも油断してるときはどうしてもソースコードばかり見て見逃しがち。
呆気なさすぎて本当に腹が立つので、ブログの記事として残しておく。

参考:
PHPマニュアル:error_reporting:出力する PHP エラーの種類を設定する(関数)
PHPマニュアル: errorfunc関数の実行時設定(php.ini)