php spot
phpが使えるレンタルサーバー特集
検索グラス
トップページへ

例外処理
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() のようにエラーメッセージを取る、という使い方を統一しておけば使う側は非常に楽チンです。

スポンサードリンク



もどる
管理人の新着ブログ記事

    プライバシーポリシー | お問い合わせ
copyright © 2003-2018 phpspot all rights reserved. powered by phpspot CMS.