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文のサンプルのコードです。
5行目は、例外が起こる可能性がある関数をtryブロックで囲んでいます。
16行目は、throw文で例外を投げています。
8行目は、例外をcatchしメッセージを表示します。「エラーです」
10行目は、finallyブロックでメッセージが表示されます。「処理が終了しました」

<?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;
}
?>

独自の例外を作成する

独自の例外を作成するには、Exceptionクラスを継承します。
24,31行目で、Exceptionクラスを継承して独自の例外を作成しています。
26,33行目の__toStringは、Exceptionクラスにあるメソッドです。オーバーライドすることにより、独自の文字列を出力するようにしています。
6,8,10行目にcatchブロックがあります。この例では8行目でcatchされ「3を入力して下さい」と表示されます。

<?php
$num1 = 2;
$num2 = 1;
try{
	echo calc1($num1,$num2);
}catch(TestError1 $e){
	echo $e;
}catch(TestError2 $e){
	echo $e;
}catch(Exception $e){
	echo $e->getMessage();
}finally{
	echo "処理が終了しました";
}
function calc1($a,$b){
	if( $a != 2 ){
		throw new TestError1;
	}
	if( $b != 3 ){
		throw new TestError2;
	}
	return $a/$b;
}
class TestError1 extends Exception
{
	function __toString()
	{
		return "2を入力して下さい";
	}
}
class TestError2 extends Exception
{
	function __toString()
	{
		return "3を入力して下さい";
	}
}
?>
 はまったらエンジニア特化型Q&Aサイト
【teratail(テラテイル)】で質問しましょう!


△上に戻る