PHP:例外処理 = 404 Not Found の実装

例外処理:アクセス先が、存在しないURLの場合の対応

  • 404 Not Found」を表示させる
  • 実装理由:エラーごとに処理を変えたいから
  • 「Exceptionクラス」は、PHPのエラー(例外)処理の「親」
try {
  // 例外処理:404 Not Found
  if (!$params) {
    throw new HttpNotFoundException();
  }
} catch (HttpNotFoundException) {
  $this->render404Page();
}
catch (HttpNotFoundException) {    --- ①
  $this->render404Page();
}

---
catch() {例外処理} 
---
throw new HttpNotFoundException();
を使えば、「①」が呼び出される。

  • class_exists():クラスが存在するかを判別してくれるメソッド
  • method_exists():メソッドが存在するかを判別してくれるメソッド
    • 使い所:エラーが発生する箇所
    • 動作の根本になる箇所から、エラー元になるものを探す。
      例:URLを振り分ける Router を考えると良いかも。

上記の判別メソッドを使って、404 のエラー(例外)処理を実装する。

例:

1. 存在しないクラスがでてきたら、404を返す
if (!class_exists($controllerClass)) {
   throw new HttpNotFoundException();
}

2. 存在しない関数(メソッド)がでてきたら、404を返す
if (!method_exists($action)) {
   throw new HttpNotFoundException();
}
・よりクレバーな実装
  • throw new HttpNotFoundException();の引数に、エラーごとに異なる文字列を入れといて、
    ログにエラー箇所を吐くようにする実装方法

  • それ以外に、簡易的に実装の際にエラー箇所を明示するなら、以下かが例。

if (!$params) {
   echo $params . 'URLは、存在しません';
   die();
}

if (!class_exists($controllerClass)) {
   echo $controllerClass . 'クラスは、存在しません';
   die();
}

if (!method_exists($action)) {
   echo $action . '関数は、存在しません';
   die();
}