PHP 例外処理のサンプル(try…catchとthrow)

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ブロックがあります。「独自の例外です」と表示されます。

関連の記事

PHPクラスの仕組みと使い方のサンプル
PHP コンストラクタのサンプル
PHP クラスの継承の仕組みとサンプル

△上に戻る