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

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

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

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

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

解決済

6回答

2322閲覧

例外"が"投げられた?

aaaaaaaa

総合スコア501

PHP

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

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

0グッド

1クリップ

投稿2016/04/21 11:36

編集2016/04/22 02:28

開発者が予めエラーを想定し、想定したエラーが発生したときに行う処理を例外処理と呼び、
その想定したエラーを例外と呼びます。そして、その例外にphpに予め組み込まれているexceptionクラスとその子クラスのインスタンスを送ることを例外が投げられた、と言います。
例外"が"ということは、エラーが投げられたということでしょうか。
インスタンスを送信しているので、exceptionが投げられたのほうがシックリくるのですが、なぜ例外"が"投げられたというのでしょうか。

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

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

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

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

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

guest

回答6

0

昔からの、IT系の変な翻訳のまま、というところでしょうか。
実際のコード上で例外を投げる(想定外の処理が発生したので処理を、通常の流れから変える)という実装が、

throw new exception

と、プログラムで記載します(言語によっていろいろ違いますが)ので、
これを、そのまま翻訳すると、

新しい例外を投げる

ってな感じに翻訳できるので、おそらく例外という概念が浸透しはじめた当初の頃、どこかの翻訳がそのようになっていて(プログラミング言語C++あたりにでも書いてあるのか?)そのまま、現在まで使われているのかと。

意味的にも、プログラマさんたちが、「投げる」というところで、通常処理以外に、とんでいっちゃう、みたいなイメージもつかみやすく、だからといって、当時は新しい概念ですので、他に候補もなく、といったところでは。

また、例外処理が、

try{ throw new exception(e); }catch(e){ }

と、投げられてた例外を

catch

するというところも、まさに、例外情報を、投げる&つかまえる、みたいな、そんなイメージがぴったりだったり。

てな、私的な雑談でした。

投稿2016/04/22 04:16

ItoTomonori

総合スコア1283

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

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

0

「例外」が「exception」の訳語です。なので、「例外が投げられた」と「exceptionが投げられた」は、この場面では全く同じ意味です。

投稿2016/04/21 12:26

編集2016/04/21 23:59
otn

総合スコア84505

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

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

0

ベストアンサー

以下、PHP に限らない、手続き型のプログラミング言語一般の話です。

「例外」=「想定内のエラー」というのはちょっと違うかもしれません。
例外処理の要諦は、異常状態の処理と大域脱出にあると考えています。

ある関数やメソッドの中では、何らかのひとまとまりの処理を行うわけですが、その「通常処理(業務ロジックって言ったりもする)」ができないような「異常状態」も存在するわけです。頑健性のあるシステムを構築するには、異常状態への対処もしなければならないわけですが、関数内に異常状態に対する処理と本来の通常処理が混在した形になっていると、通常処理の流れがわかりにくくなり、実装上・仕様上のバグに気づきにくくなるし、業務ロジックの変更についていくの困難になってしまいます。そこで、異常状態を検出したら通常処理の流れから飛び出すように書ける、というのが例外機構を備えたプログラミング言語の利点なわけです。
余談ですが、手続き型のプログラミング言語において、「通常処理の流れから飛び出す」もう一つの仕組みが return 文です。例外機構を持たないプログラミング言語では、異常状態を検出したらその異常状態を表すものを return しちゃう、という書き方をすることで、異常状態の処理と通常処理とをわけることができます。

大域脱出というのは、通常のフローでは (return 文によって) 関数の呼び出し元にしか戻れないところ、呼び出し元の呼び出し元の呼び出し元の ... 呼び出し元まで一気に戻れる、ということです。言い方を変えると、飛んできた例外を捕まえる (捕捉する、catch する) 記述をしてあるところまで一気に戻ることができるわけですが、一気に戻るための記述が例外を投げる (throw) という表現になるわけです。

最初に戻ります。エラーとは何か、異常とは何か、という定義問題にもなってくるわけですが、「通常処理ができない条件」というのをとりあえずここでは「異常」と言ったわけですが、それは必ずしも「エラー」ではないことも多いわけです。「通常処理」のフローをきれいに書くために、「通常処理ができない条件」への対処を分離して書くのが例外処理です。
大域脱出できる、という点に着目し、(全然エラーじゃないし、「異常」でもないようなケースで)フロー制御の一部として利用する方法もあります。
たとえば、forEachPerson() という、管理している person について繰り返しコールバック関数を適用するような関数があって、次のように使えるとします。

php

1forEachPerson(function($person) { 2 echo $person['id'] . ':' . $person['name']; 3});

このとき、id がある値以上になったら繰り返しを中断したい、というときに例外を使って

php

1try { 2 forEachPerson(function($person) { 3 if ($person['id'] > 100) { 4 throw new Exception('id が 100 超えたんで途中で抜けるよ'); 5 } 6 echo $person['id'] . ':' . $person['name']; 7 }); 8} catch (Exception $e) { 9 // do nothing 10}

例外処理は一般的に重いので、速度が要求されるところで気軽に使うのは考えものかもしれませんが。

投稿2016/04/22 00:07

unau

総合スコア2468

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

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

0

投稿2016/04/21 12:05

tkturbo

総合スコア5572

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

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

0

exceptionを投げた、exceptionが投げられた、という人もいます。
「えくせぷしょん」よりも音が短い「れいがい」のほうが好まれるのではないでしょうか。
プログラマはめんどくさがりなので。

例外が出た、とか、例外が起きた、とかの言い方もしますが、throwなので「投げた」が通じやすいです。

ご質問の内容とマッチしないかもしれませんが、「が」を強調なさっているので念の為。
「を」と「が」の使い分けは受動態か否かの問題です。

投稿2016/04/21 23:53

編集2016/04/22 00:32
tnd-.-b

総合スコア247

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

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

unau

2016/04/22 07:17 編集

横から失礼します。「協調」→「強調」、ですね。 ※ 元々、回答に誤字がありましたが、今は正しく修正されています。
tnd-.-b

2016/04/22 00:33

ありがとうございます(^^;
guest

0

細かい話ですが…

その想定したエラーを例外処理と呼びます。

想定したエラーに基づき対応するものを例外処理といいます。
「例外処理に遷移した」の方が実状にそってるかも?

投稿2016/04/21 12:19

takasima20

総合スコア7458

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問