例外について

単純な例外

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 "システムエラーです";
}

未分類

Posted by admin8admin