PHPの例外について 覚え書き

PHPの例外 - Qiitaという記事を読んだので、自分なりに

PHPの例外とは

 PHP本体が持つ定義済み例外
 PHPに標準でバンドルされるStandard PHP Library(SPL)の例外のSPL例外

SPLは標準で組み込まれている
 →PHPの機能として標準的に使う事ができる

SPL例外

 守るべき3つのルール
 1.例外は例外の時に使用する
 2.制御構造のために例外を用いない
 3.値を渡すために例外を用いない
ようするに「例外は真に例外的な時にのみ用いるのであって、通常の制御のために用いてならない」

例外の例
・データベースが接続できない
・Web APIをアクセスできなかった
ファイルシステムのエラー
・テンプレートファイルや設定ファイルのパースエラー

独自の例外を作ろう

throw new RuntimeException("$fileがありません");   // OK
throw new FileNotExistsException($file);        // Better

RuntimeExceptionをそのまま使うよりは独自の例外を作った方が良い

LogicExceptionとRuntimeExceptionの区別

・LogicException :コンパイル時またはアプリケーション設計で検出できる例外
例) 存在しないメソッドを呼び出そうとしている時とか
・RuntimeException :実行時のみ検出できる例外。すべてのデータベース例外のベースクラス
例) 外部ファイルにアクセスする時とか

OutOfRangeExceptionとOutOfBoundsExceptionの区別

・OutOfRangeException :無効なインデックスを要求した場合にスローされる例外。
 コンパイル時に検出しなければならない
 コードのみで範囲が決定してそれに違反するもの。
 要するにバグ
・OutOfBoundsException :値が有効なキーで無かった場合にスローされる例外。
 コンパイル時には検出できないエラー
 実行時にデータが外部から読まれてその結果無効なキーが使われるもの等、
 実行時に範囲外が判明するのがOutObBoundsException。
 実行条件によってスローされる例外

参考

PHPの例外 - Qiita