はじめに
Excetionについての理解を深めるためにメモ
例外を呼び出すとき
$flag = false;
try {
if(!$flag) {
throw new Exception("flag is false.");
}
} catch(Exception $e) {
echo $e->getMessage();
}
実行結果
flag is false.
今一度、動作の流れを確認
もう決まり文句みたいにtry-catchと例外クラスを使っているが、今一度、丁寧に流れを追ってみる
throw new Exception("flag is false.");
例外を発生させるためにはtryブロックで囲む必要がある。
例外が発生した場合は、Exceptionクラスのインスタンスをthrowする
throwされた例外はcatchで補足される
ここでExceptionクラスの公式を確認。
public Exception::__construct ([ string $message = "" [, int $code = 0 [, Throwable $previous = NULL ]]] )
Exceptionクラスのコンストラクタの第1引数でエラーメッセージをセットしているのね。
で、 catch(Exception $e)
の$eは、Exceptionクラスのインスタンス
Exceptionクラスのメソッドいろいろ
$flag = false;
try {
if(!$flag) {
throw new Exception("flag is false.");
}
} catch(Exception $e) {
echo $e->getMessage().PHP_EOL;
echo $e->getPrevious().PHP_EOL;
echo $e->getCode().PHP_EOL;
echo $e->getFile().PHP_EOL;
echo $e->getLine().PHP_EOL;
echo $e->getTraceAsString().PHP_EOL;
}
独自例外クラス
独自の例外クラスも例外クラスを継承するだけなので簡単
myexception.php
class MyException extends Exception { }
$flag = false;
try {
if(!$flag) {
throw new MyException("flag is false.");
}
} catch(MyException $e) {
echo $e->getMessage().PHP_EOL;
}
もちろん独自の例外クラスにメソッドを作成することもできる
myexception.php
class MyException extends Exception {
public function getClass() {
return __CLASS__;
}
}
$flag = false;
try {
if(!$flag) {
throw new MyException("flag is false.");
}
} catch(MyException $e) {
echo $e->getMessage().PHP_EOL;
echo $e->getClass().PHP_EOL;
}
実行結果
flag is false.
MyException