![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
No.3ベストアンサー
- 回答日時:
例外がスローされたとき、完結していない操作は中断される、と覚えておくといいでしょう。
ご提示の例であれば単純に $a のインクリメントは 3 になるまで済んでいますが、ここで以下のような例を考えてみましょう。function div($a, $b) {
if ($b == 0) {
throw new InvalidArgumentException('Division by zero');
}
return $a / $b;
}
try {
$result = div(3, 0);
} catch (Exception $e) {
echo $e->getMessage();
}
こちらの例では、$result に代入しようとした段階でまず div がコールされますが、途中で例外がスローされています。こういった場合では $result に対する操作は中断され、 $result は未定義の状態のまま catch ブロックに移行し、 $e に例外がセットされるということですね。
なお、例外の使い分けに関して…最初は「Exception」でひとまとまりでいいと思いますが、慣れて来たら最低限「LogicException」「RuntimeException」「ErrorException」の3つぐらいは区別してスローするようにした方が望ましいでしょう。
LogicException
ソースコードを実行する前の段階で検出しなければいけない例外で、プログラマの誤りを示すのに使われます。
RuntimeException
ユーザー入力・環境依存な情報を使う過程で発生してしまうかもしれない例外です。
ErrorException
set_error_handler によるエラー→例外変換専用の例外です。
必ずしも LogicException と RuntimeException のどちらかに明確に分類できるということはありません。さきほどの div も「ユーザー入力をそのまま使うことを想定するなら RuntimeException」「プログラマ側に事前に検証させることを想定するなら LogicException」という2通りの解釈が出来ますね。
RuntimeException
→ 堂々と catch に含めてOK
LogicException
→ 必ずしも catch に含めちゃダメというわけではないが、基本的に含めない方がいい
ぐらいの感覚でいいと思います。
参考: PHP標準例外まとめ
http://qiita.com/mikakane/items/dafd3d28c27311e5 …
回答ありがとうございます
やっと理解できました。次から安心して使えます。
Exceptionを使い分けることも学べました。ありがとうございました
No.2
- 回答日時:
正常にforが終了というか、forから抜け出します。
質問文のコードだと } が1つ足りないので文法エラーですが。
学習するつもりなら、手元にPHPを実行できる環境を作った方が良いですよ。
No.1
- 回答日時:
なぜ試さないのですか?
テストはしていますが
理解しないで使っていると使うたびに「これ一応動いたし大丈夫かな?・・・」 と余計な思考をしてしまうほうなのでしっかりと学びたいと思っています
あと、カッコがぬけていました。すいません
try {
for($a = 0; $a < 5; $a++) {
if($a==3){
throw new Exception('ip');
}
}//for終了
} catch (Exception $e) {
$msg = $e->getMessage();
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- Java Javaのソースコード作成が難しいです... 10 2022/11/11 14:06
- Java すみません。助けてください。 javaについての質問です。 integerに変換できない数値をエラー 5 2022/05/18 19:16
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- 英語 下記の英文を日本語に訳してください。 1 2023/03/10 13:04
- 英語 分離不定詞 1 2023/07/16 17:29
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- その他(プログラミング・Web制作) zshの例外処理 1 2022/06/02 16:36
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- 英語 下記の英文の日本語訳をお願いします。 1 2023/03/02 10:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP8を使うと、大量のWarningが...
-
xamppをインストールしましたが
-
ローカルで動いているPHPがタイ...
-
クラス
-
PHPで特定のURLにジャンプす...
-
functionについて
-
phpからパスワードを入れ、MySQ...
-
エラーメッセージの意味と解決...
-
sql文について質問です。エラー...
-
ローカルでは正常に動くのにサ...
-
フォントの色を変えるには?
-
正規表現での最後尾のバックス...
-
phpについて バージョン8.0
-
ワードプレスについて
-
phpのfopenで行単位のfseekは出...
-
【BAT(バッチ)ファイル】Web...
-
onedrive にexcelファイルをア...
-
文字化けに関して
-
ヒアドキュメントを中断してinc...
-
文字化けについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォントの色を変えるには?
-
パースエラーとは?
-
トランザクションが原因?DBに...
-
PHP8を使うと、大量のWarningが...
-
「@$変数」の「@の意味は?」
-
PHPで、エラーがない場合のみ画...
-
SELECTの値を保持する
-
PHPでfatal errorが出ても無視...
-
正規表現での最後尾のバックス...
-
PHPで特定のURLにジャンプす...
-
PHPでネットワークドライブのop...
-
これは例外処理でしょうか?
-
ワードプレスサイト PHP8.0.25...
-
PHPにて外部サイト内容が取得不...
-
メールアドレスが存在するか確...
-
phpのrenameでエラーが出ます
-
Localeクラスについて
-
urlの直接入力を防ぐには
-
phpでget_headers()が使えない?
-
bindValueエラー
おすすめ情報