プログラムにおいてエラー処理は非常に重要です。
何らかのエラーが発生した場合、それを検知し適切に処理しなければなりません。
多くの言語でエラー処理のための仕組みが「例外処理」として備わっています。
PHPでも例外処理の仕組みを使うことができます。
エラー処理が必要な関数
例えば、割り算を行って値を返す関数を作成します。
1 2 3 |
function warizan($num1,$num2){ return $num1 / $num2; } |
この関数は以下のように使用します。
1 |
echo warizan(6,2); // 3と表示 |
正常な処理だけであればこれで十分でしょう。
しかし、割り算は値によってはエラー処理が必要です。それは0によって除算できないからです。
1 |
echo warizan(6,0); // エラー |
この場合、warizan関数内でエラーとなってしまいます。
例外を発生させる
では、エラーをどのように呼び出し元に知らせればよいでしょうか? そのための命令としてthrow()があります。
1 2 3 4 5 6 |
function warizan($num1,$num2){ if( $num2 == 0 ){ throw new Exception("0では除算できません"); } return $num1 / $num2; } |
$num2が0だったとき、Exceptionクラスのインスタンスを作成し、それを throw命令で指定しています。この結果、$num1 / $num2 は実行されず、呼び出し元に戻ります。
Exceptionクラスのインスタンスを作成時に与えている文字列はエラーメッセージです。
これは例外を検知したときに利用することができます。
例外を検知する
では呼び出し元では例外をどのように検知すればよいでしょうか。
以下のようなコードを書きます。
1 2 3 4 5 |
try{ echo warizan(6,0); }catch(Exception $e){ echo "エラー:" . $e->getMessage(); } |
まず例外を検知したいコードの部分を try{ } で囲みます。
正常に終了すればそのままこの部分だけが実行されます。
しかし、例外が検知された場合、次のcatch内が実行されます。
catch()では引数としてExceptionオブジェクトが与えられます。これはthrowで作成したオブジェクトです。
このオブジェクトのgetMessageメソッドを実行することでExceptionオブジェクト生成時に設定したエラーメッセージを取得することができます。
まとめ
例外処理のメリットはまとめてエラー処理ができることです。
もし戻り値をチェックすることでエラー処理を行おうとしたら関数を呼び出す度にエラーチェックをしなければなりません。
しかし例外処理でまとめることで、try内はエラー処理にわずらわされず本来の処理のみを記述していくことができます。
エラー時の処理はcatchでまとめて書けば良いだけになり、非常にすっきりしたコードを書くことができるようになります。