- ベストアンサー
try~catchを使ってPHPのエラーハンドリングを学ぼう!
- try~catchを使うことで、エラーハンドリングを行うことができます。
- throw new Exceptionが発生したら、catchブロック内の処理が実行されます。
- try~catch内の範囲は、エラーが発生しやすい箇所のみを囲むべきです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>> throw new Exceptionが出現したら、catchまでの処理をしないでとばすとゆうことですか? はい。 代入において右オペランドで例外が発生した場合、その代入文は無効になります。 代入せずに直接echoしようとした場合も同様に、そのecho文は無効になります。 例 function hoge() { throw new Exception('エラーが発生しました'); return 'hoge'; } try { throw new Exception('エラーが発生しました'); echo hoge(); // hoge() は実行されるがecho文は実行されない } catch (Exception $e) { echo '例外発生', $e->getMessage(), "\n"; } >> try~catchを抜けたら、他の処理は普通に実行されるのでしょうか? はい。 >> try~catchのカッコ{で囲む範囲は大きくしたほうがいいでしょうか?(大きく囲むと処理スピードおそくなりますか?) 処理速度云々ではなく、 "意味" で囲う範囲を定めてください。 例 /* 初期化処理 */ $a = ...; $b = ...; /* ユーザーからの入力を受け取る */ try { if (!isset($_POST['input']) || !is_string($_POST['input'])) { throw new RuntimeException('パラメータが不正です'); } if (preg_match('//u', $_POST['input']) === false) { throw new RuntimeException('不正なエンコーディングです'); } if ($_POST['input'] === '') { throw new RuntimeException('1文字以上入力してください'); } echo htmlspecialchars($_POST['input'], ENT_QUOTES, 'UTF-8'); } catch (RuntimeException $e) { printf("例外発生: %s\n", $e->getMessage()); } 上記の例でも使用していますが、可能な限りExceptionクラスの代わりにその継承クラスである「RuntimeException」や「LogicException」を使ったほうがいいと思います。前者は実行時に発生するかもしれない例外、後者は発生してはいけない例外(コーディングミスなど)です。それらにもさらに継承クラスがあるのでそれを用いるとさらに例外が細分化できていいと思います。 http://qiita.com/mikakane/items/dafd3d28c27311e5f429
お礼
回答ありがとうございます try~catch理解できました。これから積極的に使っていこうと思います