【PHP】例外処理のやり方(throw~try~catch)




この記事ではPHPで例外処理を行う方法を簡単に説明いたします。公式ドキュメントのページはこちらです。

目次

例外処理とは?

例外処理とは、ユーザが(開発者が想定できる範囲で)間違った操作をしたときに行う処理のことです。ユーザーがシステム開発者の意図していない使い方をするということはよくあることです。そのため、質の高いプログラムをつくるには、例外に対して適切な処理を設定しておく必要があります。

PHPにおける例外処理の構文

function hoge() {
    if (条件式) {
        throw new Exception(); //Exceptionオブジェクトを生成して吐き出す
    }
}

try {
  //実行したい処理
} catch (Exception $e) {
  //例外が発生した(=Exceptionオブジェクトがthrowされた)ときの処理
} finally {
  //例外が発生してもしなくても必ず行いたい処理
}

まず関数の中で、例外になる場合にExceptionオブジェクトを吐き出すようthrow new Exception()を記述します。

次に、実行したい関数をtryの中に書き込み、関数内で例外が発生した場合の処理をcatch内に書き込みます。catchの引数は、投げられたExceptionオブジェクトを受け取りますが、慣例として$eという名前で受け取ることがほとんどです。

例外が発生しても必ず実行したい処理がある場合、finallyの中に書くことでtryの処理が終了する前に実行することが出来ます。

実際に例外処理をしてみた

では、具体的に例外処理のコードを書いていきます。今回は割り算の関数を実行する際に例外処理を行います。割り算では、なにかの数字を0で割ることを禁止しています。そこで、ユーザーが割る数として0を入力した際に例外処理を行います。

function division($num_1, $num_2) {
    if ($num_2 == 0) {
        throw new Exception("0で割ることは禁止です");//Exceptionオブジェクトを投げる
    }
    return $num_1 / $num_2;
}

try {
    echo division(15, 5);
} catch (Exception $e) {
    echo $e->getMessage();
}
//処理結果
//3

try {
    echo division(15, 0);
} catch (Exception $e) {
    echo $e->getMessage();//
}
//処理結果
//0で割ることは禁止です

1行目では割り算を行う簡単な定数を定義しています。ただ、$num_2が0だと計算処理が出来ないので、例外を発生させています。

Exception()の中に引数としてテキストを渡すことが出来ます。このテキストは、getMessage()メソッドによって取得することができます。

参考ページ