PEAR2の例外の基本はインターフェイス

タイトルだけでは日本語が崩壊してますが、
現在wiki.php.netに挙がっているPEAR2のexceptionポリシーでは基本となるexceptionはインターフェイスとし、それをimplementsした個々の例外クラスを用いるようです。
http://wiki.php.net/pear/rfc/pear2_exception_policy


Zend Frameworkなどではライブラリにてベースとなる例外クラスを、Exceptionクラスをextendsしたものを作って使用し、いかなる例外を投げようともそのベースとなるクラスでキャッチできる仕組みというか思想です。
http://framework.zend.com/manual/ja/zend.exception.html
(ただし、前回のエントリでも指摘したとおりZFの場合libarary/Zend配下あたりで「grep -r "throw new" . | grep -v Zend 」などとするとオヨヨとなるわけですが)


(rfcの)PEAR2のやり方だと以下の例外処理方法が可能です。

<?php
interface Mylib_Exception{};

class Mylib_InvalidArgumentException extends
      InvalidArgumentException implements Mylib_Exception{}
      
try {
    throw new Mylib_InvalidArgumentException("error1");
} catch (InvalidArgumentException $e) {
    var_dump($e);
}

try {
    throw new Mylib_InvalidArgumentException("error2");
} catch (Mylib_Exception $e) {
    // interface だけどキャッチできる
    var_dump($e);
}

ライブラリを呼び出す側はcatchする際に、SPLにて多々ある○○Exceptionを直に記述可能という訳です。インターフェイスがキャッチできる点については、「本当にOOPしたかったらRuby使うっすよ」という個人的結論です。