PHPのエラーをまとめる
PHPのエラーについて勉強したので、まとめます。
概要
PHPのエラーには、大きく分けて3種類あります。
上記の3種類のいずれかに属するものとして、エラー定数というものがあります。
代表的なエラーの重要度が高い順に並べると、次のようになります。
E_PARSE
E_ERROR
E_WARNING
E_NOTICE
E_DEPRECATED
E_STRICT
(PHP7.0で廃止)
そして、上記のエラー定数の中に個別のエラーが所属しています。
プログラムを実行した際に画面に表示されるエラーは、この個別のエラーです。
例えば、E_NOTICE
に所属しているエラーには、次のようなものがあります。
- 変数が未定義
Notice: Undefined variable: foo in /var/www/html/sample.php on line 5
- 定数が未定義
Notice: Use of undefined constant FOO - assumed 'FOO' in /var/www/html/sample.php on line 6
パースエラー
- エラー定数では、
E_PARSE
が該当します。- プログラム実行時のエラー表記は、
Parse error: ~~~
です。
- プログラム実行時のエラー表記は、
- プログラムのコンパイル時(Parserの処理の時)にエラーが発生するため、プログラムが1行も実行されることなく終了します。
- コンパイル時の挙動は、PHPのソースコードが実行されるまでの流れを参照ください。
実行時のエラー
- エラー定数では、
E_ERROR
が該当します。- プログラム実行時のエラー表記は、
Fatal error: ~~~
です。
- プログラム実行時のエラー表記は、
- 前述のパースエラーと異なり、エラーが発生するまでは正常にプログラムが動作します。
- エラーが発生すると、その時点でプログラムの処理が終了します。
警告・注意
- エラー定数では、以下のものが当てはまります(
E_PARSE
,E_ERROR
以外のすべて)E_WARNING
E_NOTICE
E_DEPRECATED
E_STRICT
(PHP7.0で廃止)Strict Standards: ~~~
E_WARNING
- 実行時の警告を表します。
- 例えば、引数の数を間違えた場合など
- プログラム実行時のエラー表記は、
Warning: ~~~
です。 - 警告が発生した場合は、その時点の式の評価や文の実行をやめてしまいますが、その後の処理を継続します。
- ポイントとしては、評価されなかった式などによって、本来得られるべきと開発者が考えていた値が取得できていないことです。これによって、予期しない挙動を起こす可能性があるため、E_WARNINGがなくなるように修正すべきです。
E_NOTICE
- 実行時の警告を表します。
- E_WARNINGとの違いは、PHPが自動的に対処を施せる程度の警告であることです。そのため、E_WARNINGよりも重要度が低いとされています。
- プログラム実行時のエラー表記は、
Notice: ~~~
です。 - E_WARNINGに比べると重要度は低いが、自動キャストなどが行われているため、予期しない挙動が起こりえます。修正すべきです。
E_DEPRECATED
- 過去に許されていた文法や関数が現行バージョンでは非推奨になっており、将来的に廃止予定のものを使った場合の警告です。
- プログラム実行時のエラー表記は、
PHP Deprecated: ~~~
です。 - この警告が発生しても、実際に廃止になるまでは動作するため、急いで修正しなければならないものではないです。
- しかし、いずれ動作しなくなることを表しているので、修正した方が無難です。
E_STRICT (PHP7.0で廃止)
- 互換性維持などのために、変更した方が望ましい場合の警告です。
- PHP7.0で、このエラー定数自体が廃止になり、かつてこのエラー定数に所属していたエラーは、別のレベルのエラー定数に統合されるなどしています。
- プログラム実行時のエラー表記は、
Strict Standards: ~~~
です。 - E_DEPRECATEDと同じ理由で、修正した方が無難です。