phpの例外処理のサンプルです。
try...catch構文とthrow文についてです。
目次
try...catch構文
try { 実行する処理 } catch ( 例外のクラス 変数 ) { 実行する処理 } finally{ 実行する処理 } |
- 例外が起こる可能性がある箇所をtryブロックで囲みます。
- 例外が発生しcatchブロックの引数の例外のクラスの型と同じときにcatchブロックの処理が行われます。
- PHP 5.5 以降ではfinallyブロックも指定できます。finallyブロックは例外のあるなしにかかわらず常に実行されます。
- 以下はPHPマニュアルの例外(exceptions)のリンクです。
http://php.net/manual/ja/language.exceptions.php
throw文
throw new 例外 |
- 任意の場所で例外を投げることができます。
- 例外は以下である必要があります。
・Exceptionクラス
・Exceptionクラスのサブクラス
コード
try...catch構文とthrow文のサンプルです。
<?php
$num1 = 2;
$num2 = 0;
try{
echo calc1($num1,$num2);
}catch(Exception $e){
echo $e->getMessage();
}finally{
echo "処理が終了しました";
}
function calc1($a,$b){
if( $b == 0 ){
throw new Exception("エラーです");
}
return $a/$b;
}
?>
5行目は、例外が起こる可能性がある関数をtryブロックで囲んでいます。
16行目は、throw文で例外を投げています。Javaと違いここでthrowが必要です。
8行目は、例外をcatchしメッセージを表示します。「エラーです」
10行目は、finallyブロックでメッセージが表示されます。「処理が終了しました」
独自の例外を作成する
独自の例外を作成するには、Exceptionクラスを継承します。
<?php
$num1 = 1;
try{
echo calc1($num1);
}catch(TestError1 $e){
echo $e;
}finally{
echo "処理が終了しました";
}
function calc1($a){
if( $a === 1 ){
throw new TestError1;
}
return $a;
}
class TestError1 extends Exception
{
function __toString()
{
return "独自の例外です";
}
}
?>
17行目で、Exceptionクラスを継承して独自の例外を作成しています。
19行目の__toStringは、Exceptionクラスにあるメソッドです。
オーバーライドすることにより、独自の文字列を出力するようにしています。
6行目にcatchブロックがあります。「独自の例外です」と表示されます。
関連の記事