例外について
単純な例外
try {
//処理
} catch ( Exption $e ) {
var_dump($e);
} finally {
//必ず実行される
}
例外のネスト
class Test {
public function testing() {
try {
try {
throw new Exception('foo!');
} catch (Exception $e) {
// 改めてスロー
throw $e;
}
} catch (Exception $e) {
var_dump($e->getMessage());
}
}
}
$foo = new Test;
$foo->testing();
Throwable
php7以降
エラーではない。エラークラスや例外クラスなどの基底クラス。インターフェイスなのでnewできない
エラー
シンタックスエラーなど
Exception
例外クラス
Throwableの子クラス
error
php7以降、errorクラス
前述の「エラー」とはまた違う
Throwableの子クラス
ErrorException
エラー例外クラス
ErrorExceptionはExceptionの子クラス
受け取り方
catch(Expection) //php5以前。ErrorExceptionも受けれる
catch(Throwable) //php7以降。全て受け取れる
Throwableの関数一部
Throwable::getFile 発生したファイルを取得
Throwable::getPrevious 前の例外を取得
完全な例外の処理
//エラーハンドラの設定
function exception_error_handler($severity, $message, $file, $line) {
if (!(error_reporting() & $severity)) {
// このエラーコードが error_reporting に含まれていない場合
return;
}
throw new ErrorException($message, 0, $severity, $file, $line);
}
set_error_handler("exception_error_handler");
//例外クラス作成
class MyException extends Exception {
}
//実行
try {
if($value[0] > 5){
throw new MyException("値が許容値を超えています");
}
} catch(MyException $ex){
// 与えられた値が正しくない場合の処理。アプリケーション特有の例外。プログラムは正しく動作している
echo $ex->getMessage();
} catch(ErrorException $ex){
// プログラム実行エラー
// 例えば$valueがarrayでなかった場合Noticeが発生し、これがErrorExceptionに変換されて投げられてくる
// これはシステムの不具合であり、そこにバグがあることがわかる。
// この例外のエラーメッセージはシステムのバグの実態なので、ユーザーに知らせるべきではない
echo "システムエラーです";
} catch(Exception $ex){
// 予期しない例外。ここで例外がキャッチされた場合も、やはりバグがあることがわかる。
// この例外のエラーメッセージはシステムのバグの実態なので、ユーザーに知らせるべきではない
echo "システムエラーです";
}
ディスカッション
コメント一覧
まだ、コメントがありません