なにごとにも例外は付きものです。
あるクラスのあるメソッドを使ったときに、エラーが発生した際にエラーを投げるものがあります。(throw : スロー)
その投げられた例外を捕獲(catch : キャッチ)してエラー内容の取得までできるようにするための仕組みがこのZend_Exceptionクラスです。
ただし、これを便利に使うためにはどのクラスがどんな場面で例外を投げるかなど把握していないと使えるわけがありません。
このことは結構難問だと思います。
なので例外の記述に出くわしたり、こんな場合に例外が使えたら便利そうだと思ったときにその都度リファレンスを辞書的に引いて覚えていくしかありません。
大まかな記述は以下のようになります。
tryブロックにコードを、catchブロックにはエラー時の後始末処理を記述することになります。
特定のコンポーネントから投げられる例外には以下のパターンもある。
まずは動きを見ていきます。
上記を実行すると、tryブロック内だけが実行されて「try」が表示されます。当然例外を投げていないのでcatchブロックへ処理が行くことはありません。
存在しない適当なクラス名を記述してもエラー・警告は特に出ることはありません。
この部分はZend Frameworkではなく、PHPによる仕組みです。
次は例外を投げてみます。
上記を実行するとエラーが投げられますが、例外を捕獲できなかったというFatal errorが出てしまいます。
では捕獲できるように変えてみたいと思います。
これでまずtryが表示され、例外が投げられてcatchブロックへ移りcatchが表示される流れになりました。
それでは投げられたエラーメッセージを表示させてみます。
これで想定どおりまずtryが表示され、例外が投げられcatchブロックに移りcatchが表示され、最後に「エラーメッセージ」と表示される流れになりました。
次は直接tryブロック内から例外を投げる記述をする代わりに、例外を投げる関数を呼ぶことをしてみます。
これも先ほどと同様、try表示、catch表示、エラーメッセージ表示の流れになりました。
つまりtryブロック内に記述したコードの中に、関数やメソッドのどこかで例外が投げられてもcatchブロックを正しく記述していれば捕獲することができる仕組みというわけです。