三日目 例外再入門

3日目、今日は、例外について再入門することにした。
磯野ーそろそろチャット作ろうぜー。という中島の声がするが気にしないことにする。

ちなみに、細かいことをこんどちゃんとまとめて、どこかのPHP勉強会で話すかもしれない。
ぶっちゃけ例外とは?からから書こうとおもったけど、clonedのJava資料がわりとわかりやすいのでそちらを呼んでからこちらの記事を読むことをお勧めする。

PHPにおける例外

PHPのおける例外は、すべて実行時のエラーになるのでJavaみたいに「例外処理を書かないとコンパイルエラー」にはならない。

ただし、java.Lang.Errorと、java.Lang.Exceptionに該当するものがそれぞれ存在し、それぞれ、ErrorExceptionExceptionとなる。ただし、ErrorExceptionについてはマニュアルにあるとおりどこかに

<?php
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

こんなコードを書いてあげなければならない。

さらに、java.Lang.RuntimeException に該当するRuntimeExceptionなども存在する。
詳細はこちらを参照するといい

感想からいうと、RuntimeExceptionとか必要ねぇんじゃねぇかと思った。

フレームワークにおける実装

とりあえず、ZendFrameworkとsymfony1.2系について軽くしらべた、cakePHPはたぶんPHP4対応だから関係なかなと勝手に想像し、codeigniterは手元になかったので調べてない。というか調べようとおもったけど30分じゃ時間切れ。きっと誰かがトラックバックでフォローしてくれるに違いない。集合知集合知

symfony 1.2

symfony/exceptionにExceptionを継承したsfExceptionがあります。
じゃあこいつを捕まえたらいいのかというとそうでもなく各ライブラリ(DoctrineとかPropel)の例外を別途補足する必要があります。(まちがってるかも。あと、個人的にsfStopExceptionの存在が納得できない・・)
細かいポリシーについてはあとでちゃんと調べる。

ZendFramework

Exceptionを継承したhttp://framework.zend.com/manual/ja/zend.exception.html:title Zend_Exceptionがあります。
それを各ライブラリが継承して使っています。(例: Zend_Exception -> Zend_Http_Exception -> Zend_Http_Client_Exception -> Zend_Http_Client_Adapter_Exceptionみたいな感じ)

感想

RuntimeException必要な(ry
いや、っていうかもうちょっと勉強しますすいません。。。