pirosikick's diary

君のハートにunshift

エラーハンドリングについて思ったこと

クラスを作ったりしている時にいつも悩むのがエラーハンドリング。
どのタイミングでどのようにエラー処理をすればよいのかってのがかなり難しいです。毎回悩んでいては勿体無いので、何かしら考えたことをメモしておきます。

※個人的な考えです!!あんまり参考にならないと思いますw

エラーのパターンを洗い出す

漏れがあっては困るので、まずどういうエラーが発生する可能性があるのかってのを洗い出すべきかなと思います。

例外の種類分け

Javaだと明確に例外が階層構造になっていますが、PHPはかなり例外の種類が少ないです。
昔上司に聞いたとき、大きく分けて2種類の例外を用意すればいいんじゃないかなと言ってました。

LogicException

コーディングミスによるエラーの場合にスローする例外。
例えば引数の数間違えてるよとか、単体テストとかの時点で治るようなコーディングした人のミスで起こるエラー。

RuntimeException

それ以外の実行時エラー。
エラーの深刻度によって投げる例外の種類を変えると、のちのちのハンドリングしやすいかも。

ハンドリングはなるべく一箇所に固める

その方があとからの保守もしやすいはず。たぶん。
Javaはどうだったか憶えてないけど、PHPではキャッチしなかった例外はどんどん上の階層へ流れて行き、それでもキャッチされなかった場合、fatal error(たぶん)が発生し処理が停止します。
それを利用して、ハンドリングする部分を固めるとよいのかもしれません。
MVCならばCの部分にだけCatchを書くとか。
そして、細かいハンドリングをするのなら、 投げる例外の種類を増やすか、PHPの場合だとExceptionの第2引数にエラー番号というものを設定できるので、それを利用して各々のエラーに対する対処を変えていくことも可能だと思います。

あぁエラー処理ってやっぱ難しいなー