2010年3月29日月曜日

PHP:例外の投げ方を考えてみる

長い間悩んでいたが、PHPの例外を使うことを決心しました。
ただしキャッチの話じゃなくてthrowの方です。例外を投げるライブラリを使うと、catchしないといけません。ずっと「勝手に例外を放り投げるなよ」と思ってたのは秘密です。

◆そうじゃなくて、自作ライブラリで例外を投げることにしました。

こうなると、今後全てのコードで例外対応する必要があるわけですね。
大変だ。


さて、例外を使うと決めたのはいいのですが、いざ投げようとすると疑問が。
何を投げればいいんだ?
メッセージはどうする?
下の方のライブラリのエラーメッセージなんか表示してもねぇ・・・

◆で、調べたところ、例外はネストして使うと便利なようです。

たとえば「ABC」なるライブラリがあったとして、このライブラリが投げる例外をこうやって定義します。

class AbcException extends Exception {};
class NotBadAbcException extends AbcException {};
class WrongAbcException extends AbcException {};

こう書くと、どういうメリットがあるのでしょう?
こんなcatchの仕方が出来ます。

try {
  abc::do_something_wrong();
}
catch( NotBadAbcException $e ) {
  //  何かエラー処理
}
catch( AbcException $e ) {
  // その他のエラー処理 
}
catch( Exception $e ) {
  // わけの分からないエラー処理 
}

つまり例外のクラスを見るだけ何が起きたかが分かります。
つまりメッセージは読まなくてもいいのです。多分。
さらにライブラリの例外をまとめてキャッチしたりと、様々なケースにも対応可能。
エラーコード?そんなもの知らん。


またエラーの種類が分かるので、キャッチした側でメッセージを作ってしまえば、大体大丈夫みたいです。今のところ。

続き:「PHP:例外をメッセンジャーとして使って みる

0 件のコメント: