PHP

【PHP】例外を利用する方法

こんにちは、ともです。

PHPで例外処理を書く方法についてまとめたいと思います。

パーフェクトPHPという本を読んでいまして、例外の記述方法について学んだので、それについてまとめておきたいと思います。

404画面を表示させたい場面など、予想外の自体が発生した場合に実行したい処理を例外として作成しておくことで、上手く書くことができます。

この記事ではPHPのExceptioクラスを利用し、例外処理を書く方法についてまとめます。

例外とは

例外とは、正規の処理フローからは外れ、そのまま処理続行が出来ないような状況のことを言います。

例えば0除算を行っただとか、テキストファイルを読み込むのにそのテキストファイルが存在しないだとか、データベース処理においてSQL文が構文エラーだったとか。

引用元:例外処理 | Objective-PHP.net

処理が続行できない状況にあった場合に、例外を投げることで特定の処理を実行することができます。

例えば、0徐算が発生した場合(分母が0)は処理を中断し、0徐算が発生した場合の特定の処理を実行させる必要があります。

例外が発生したの処理の流れを記述する場合に例外を利用します。

tryとcatchについて

  • 例外が発生するかもしれない処理をtryに記述する
  • 例外が発生した場合の処理をcatchに記述する
  • 例外の発生有無に関わらず実行したい処理をfinallyに記述する(PHP5.5以降)

上記の記述方法で例外の処理を記述します。

Exception1の例外が発生すればException1のcatchの処理に移り、Exception2の例外が発生すればException2のcatchの処理が実行されます。

throwで例外を投げる

『throw 例外クラスのオブジェクト』で例外の発生をcatchに伝えることができます。

例外クラス(Exception)はPHP5以降に搭載されました。このクラスのオブジェクトを投げることで例外を投げることができます。

例外クラス(Exception)を継承したクラスを生成することで、独自の例外クラスを作成することも可能です。

オブジェクトを生成には『new』を利用し、例外クラスのオブジェクトを生成しています。

例外クラスのコンストラクタの第一引数はエラーメッセージですので、エラーメッセージをセットしておきます。

サンプルコード

try{
    // 例外が発生
    throw new Exception('エラーだよ!');
} catch(Exception $e) {
    // ここが実行される
    echo $e->getMessage();// Out: エラーだよ!
} catch(HttpNotFoundException $e){

} finally { // PHP5.5以降
    echo '例外が発生しても、しなくても実行';
}

上記のようなコードを書きました。

try中で強制的に例外を発生させています。Exceptionクラスの例外が発生していますので、Exceptionクラスに対応したcatchが実行されます。

getMessage 例外クラスのコンストラクタで設定したエラーメッセージの取得

例外クラスにはエラーメッセージを取得するgetMessageメソッドが存在します。これはthrowでの例外クラスのコンストラクタの第一引数で設定した値です。

まとめ

PHPで例外を投げる方法についてまとめました。

  • 例外が発生する可能性がある処理をtryで囲む
  • 例外が発生した場合は、catch中の処理が実行される
  • finallyでデフォルトの実行内容を記述できる(PHP5.5以降)
  • getMessageでエラー内容を取得できる

適切な箇所で例外を出すことで、保守しやすいコードになりますので、しっかり利用していきたいです。