PHPの処理においてエラー等が発生すると、例外がスローされる。スローされた例外をキャッチ(補足)して例外処理を行うことができる。
PHPの例外には、次に示す種類がある。
Exceptionは、PHPにおける全てのユーザ例外の基底クラスである。
Exceptionクラスは次に示すメソッドを持つ。
メソッド | 説明 |
---|---|
getMessage() | 例外メッセージを返す。 |
getPrevious() | 前の例外を返す。 |
getCode() | 例外コードを取得する。 |
getFile | 例外が発生したファイルを取得する。 |
getLine() | 例外が発生した行を取得する。 |
getTrace() | スタックトレースを取得する。 |
getTraceAsString() | スタックトレースを文字列で取得する。 |
__toString() | 例外の文字列表現 |
例外メッセージを取得する。
<?php
try {
throw new Exception("error message");
} catch (Exception $e) {
echo $e->getMessage();
}
?>
例外コードを取得する。
<?php
try {
throw new Exception("error message", 10);
} catch (Exception $e) {
echo $e->getCode();
}
?>
stacktraceを取得する。
<?php
function example() {
throw new Exception;
}
try {
example();
} catch (Exception $e) {
var_dump($e->getTrace());
}
?>
stacktraceを文字列で取得する。
<?php
function example() {
throw new Exception;
}
try {
example();
} catch (Exception $e) {
echo $e->getTraceAsString();
}
?>
キャッチした例外を再スローすることができる。
<?php
try {
example();
} catch (Exception $e) {
logException($e);
throw $e;
}
?>
PHPのtry catchでキャッチできるのは、原則として同じネームスペースに属する例外のみである。
PHPのtry catchで全ての例外をキャッチするには、Exceptionの前にバックスラッシュを付ける。
<?php
try {
example();
} catch (\Exception $e) {
echo $e->getMessage();
}
?>
これにより、異なるネームスペースに属する例外もキャッチできるようになる。
PHP組込みのExceptionクラスを拡張することで、ユーザが独自の例外クラスを定義することができる。
<?php
class ExampleException extends Exception {
# do something
}
?>
ユーザが独自に定義した例外をスローすることができる。
<?php
throw new ExampleException("error message", 1);
?>