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使うっすよ」という個人的結論です。