楽しいだけで十分です

好きなことを書きます

PHPのエラーをまとめる

PHPのエラーについて勉強したので、まとめます。

概要

PHPのエラーには、大きく分けて3種類あります。

  • パースエラー (PHPの文法間違いによるエラー)
  • 実行時のエラー (PHPの実行中に処理が継続できなくなるエラー)
  • 警告・注意 (実行は継続できるが、注意を促す)

上記の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_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と同じ理由で、修正した方が無難です。

参考