Java同様の try catch 文が使えるようになりました。
PHP4ではエラー処理といえば、
if ( ($err = func()) != "" ) {
die("エラーです");
}
のように戻り値のチェックをしていましたが、エラーというものは、呼び出し側がエラー制御を行うのではなく、呼ばれた側で、どういうエラーがあったか、というものがあった方が自然で、呼ばれた側がエラー処理を行うため、モジュールの場合より再利用性が高くなるでしょう。
更に上記では、どういうエラーが起こってエラーが出ているのかということが想像しにくいですね。
そこで try〜catch です。
// exception クラスを継承した MyException(例外クラス)の定義
class FileNotFoundException extends exception {
function FileNotFoundException($_error) {
$this->error = $_error;
}
function getException()
{
return $this->error;
}
}
class MyClass {
function open($filename)
{
if (!file_exists($filename)) {
// エラーがあった場合は throw で通知する
throw new FileNotFoundException("file not found");
}
}
}
// エラーが発生しそうな場所で try catch
try{
$class = new MyClass();
$class->open("non_exists_file"); // 存在しないファイルを渡してわざと例外を発生させる
// エラー発生時に catch
} catch(FileNotFoundException $e) {
die($e->getException());
}
このように使う。
この場合、ファイルが見つからなかった例外(FileNotFoundException) を catch する、という記述で、何をやっているのか想像しやすいですね。
catch を更に追加して、他の例外の場合にはこうするという指定も可能なので、ファイルが開けなかった FileCantOpenException などを作れば様々なエラーを処理できることになりますね。
クラスを提供する側はExceptionクラスを作らないといけないため、一見大変に思いますが、一度作っておけば、使う側では、
try{
$class = new MyClass();
$class->open("non_exists_file");
// エラー発生時に catch
} catch(FileNotFoundException $e) {
die($e->getException());
}
のように書くことで、どういうエラー処理を行っているかということの意味がとりやすくなり、
$e->getException() のようにエラーメッセージを取る、という使い方を統一しておけば使う側は非常に楽チンです。
スポンサードリンク
もどる