質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

3回答

10991閲覧

if文での例外処理をtry catchで書くとどうなるのか。CakePHP

amakusa

総合スコア176

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

2クリップ

投稿2015/08/06 10:59

編集2015/08/06 11:00

皆さんお疲れさまです。

rikさん昨日の投稿に回答ありがとうございました。
Cakephpでの例外処理(try catch)の書き方を教えてください

それで、昨日回答して頂いて

php

1 //条件分岐による例外処理 2 if ($this->Report->save($data) === false) { 3 //エラーメッセージやその後の処理 4 throw new BadRequestException('コメントの更新に失敗しました'); 5 }

こういう風に書くとよい、というのは分かったのですが、

try catchで書く場合にはこれはどう書いたらよいのでしょうか?

php

1try{ 2 $this->Report->save($data) === false; 3}catch(Exception $e){ 4 throw new BadRequestException('コメントの更新に失敗しました') 5}

こうでしょうか?
tryのカッコの中にもっと何か足す必要があるのでしょうか?
PHP:例外
これを見てもよくわかりませんでした。

どなたか教えてください!お願い致します!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

catchした中でthrowするあたりが微妙というか何がしたいのかわかりません。
通常のExceptionが飛んできた場合BadRequestExceptionとして処理したいという事でしょうか?
そうなるとかなり乱暴な処理だと思うので構造を考え直した方が良いと思います。

php

1 if ( $this->Report->save($data) === false ) throw new BadRequestException('コメントの更新に失敗しました');

こうする事によってBadRequestExceptionを投げてキャッチしてくれます。
throwの前に何か処理を書きたいなら

php

1if ( $this->Report->save($data) === false ) 2{ 3 //ここに何か処理 4 throw new BadRequestException('コメントの更新に失敗しました'); 5}

このようにした方が良いと思います。

そもそもステータスコード400番のBadRequestExceptionをここでthrowする意味も全くわかりません。

投稿2015/08/06 11:07

編集2015/08/06 11:15
nanndemoiikara

総合スコア775

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amakusa

2015/08/06 12:19

回答ありがとうございます。 本当によくわからずに投稿していました、すみません。 上記のように書いた場合はもうtry catch文を書く必要はないのでしょうか? その文だけでexceptionをthrowしてcatchもしてくれるという認識であっていますか?
nanndemoiikara

2015/08/06 14:18

CakePHPがBadRequestExceptionをキャッチしてくれるはずです。 CakePHPに明るくはないので、Exceptionはキャッチしてくれるかはわかりません。 たぶんキャッチしないんじゃないかな? BadRequestExceptionはExceptionをextendして作成された例外です。
guest

0

ベストアンサー

reportMain()を呼び出してデータ保存を行うとします。

try catch を使用する場合はこの様になります。

php

1private function reportSave($data) { 2 if ($this->Report->save($data) === false) { 3 throw new Exception('コメントの更新に失敗しました'); 4 } 5} 6 7private function reportMain() { 8 //ここまでに$data用意 9 10 //保存処理 11 try { 12 $this->reportSave($data); 13 } catch (Exception $e) { 14 //$e->getMessage() で 'コメントの更新に失敗しました' が得られます。 15 //エラー処理 16 return; 17 } finary { 18 //なにかあれば処理。この例ではfinaryは不要 19 } 20 //正常な場合のその後の処理 21}

try catch を使用しない場合はこの様になります。

php

1private function reportMain() { 2 //ここまでに$data用意 3 4 //保存処理 5 if ($this->Report->save($data) === false) { 6 //'コメントの更新に失敗しました'の処理などエラー処理 7 return; 8 } 9 //正常な場合のその後の処理 10}

この様に、try catch を使用するメリットがありません。
処理が分断されて分かりにくくなるだけです。
もしreportSave()で色々な前準備や後処理を含めて行わせるのであれば意味が出てきますが、今のところそのような必要性を感じたことが有りません。

投稿2015/08/06 12:29

編集2015/08/06 12:31
rik

総合スコア1151

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amakusa

2015/08/06 12:45

わざわざありがとうございます! これだけコード量に差が出るのですね。 確かにtry catchのメリットをあまり感じませんね。 //'コメントの更新に失敗しました'の処理などエラー処理 のところは throw new Exception('コメントの更新に失敗しました'); とか入れておけばいいでしょうか。
rik

2015/08/06 13:09

それは違います。 CakePHPの場合、 $this->Session->setFlash('コメントの更新に失敗しました'); $this->redirect(array('controller'=>'Homes','action'=>'index')); return; などです。 エラーメッセージをセットして、 ホーム画面や目的の画面に遷移させます。 View内では $this->Session->flash(); でブラウザに表示されます。 このあたりは自由に記述できます。try catch や throw に関する記述はここではしません。 CakePHP参考書通りの記述になります。
rik

2015/08/06 13:12

if ($this->Report->save($data) === false) {   //エラー時の記述 } else {   //正常時の記述 } これでも大丈夫です。
amakusa

2015/08/06 14:46

ありがとうございます!!!
guest

0

phpの例外処理については公式サイトに詳しく書かれています。
http://php.net/manual/ja/language.exceptions.php

投稿2015/08/06 11:02

rik

総合スコア1151

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amakusa

2015/08/06 12:17

再度回答ありがとうございます。 じっくり読みます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問