例外処理について学習した記録です。
例外処理とは
プログラムの実行時に発生した問題に対応できるようにしておくこと。
例)・0で割り算をする
・指定したファイルが存在しない
上記の様な問題が発生したときに、「処理を終了して、警告文を表示する」というような対応が例外処理という。
例外処理の必要性
例外処理がなければ…
問題が発生しても気付くことができず、大きな不具合につながってしまう。
→異常があったことを伝えて、対応する仕組みが必要になる。
例外処理の流れ
1. 例外を発生させる(例外を投げる)
throw を使用することで、例外を発生させることができる。
throw new Exception('エラーメッセージ');
throw するだけでは、例外処理をすることはできない。
例外処理をする為には、throw で投げられた例外を受け取り、処理するプログラムを作成する必要がある。
2. 例外を捕捉する
throw で投げられた例外を捕捉し、処理するには、
try~catch~fainallyを使用する。
try{
// 通常処理(例外が発生しうる処理)
} catch (Exception $e) {
// 例外処理
} finally {
// 例外でも通常でも必ず実行する処理(省略可)
}
使用例
除算を行う際、分母に0が来るとエラーになる。
以下は分母に0が渡された場合throwするという例外処理。
例外が投げられなかった場合は、除算が実行される。
<?php
function div($a, $b) {
if ($b === 0) {
throw new Exception('分母には0以外を入力してください');
}
return $a / $b;
}
try {
echo div(10, 2) . PHP_EOL;
echo div(10, 0) . PHP_EOL;
} catch (Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
5
分母には0以外を入力してください
例外処理をする上で大事なこと
例外を握りつぶさない
例外を握りつぶすとは、例外をcatchした後、処理を書かないこと。
→問題が生じたまま、プログラムが動作してしまう。
「使用例」の除算エラーの例を見ると……。
function div($a, $b) {
if ($b === 0) {
throw new Exception('分母には0以外を入力してください');
}
return $a / $b;
}
try {
echo div(10, 2) . PHP_EOL;
echo div(10, 0) . PHP_EOL;
} catch (Exception $e) {
} //分母が0でも、何も表示されない!!=例外を握りつぶす
例外処理まとめ
安全なコードを書く上で重要な例外処理。
独自のExceotionクラスを作成することも可能。随時記録していく。