🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

Q&A

8回答

6108閲覧

php の catch (Exception $e) の`Exception`はなんという記述名称?

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

1グッド

3クリップ

投稿2018/06/15 01:43

編集2018/06/15 06:29

php の例外処理ですが、catch (Exception $e)のような書き方をよく見かけます。このExceptionの部分の記述名称が分かりません。

振る舞いとしては、if のような挙動(もしExceptionが発生していれば、それを $e とし、{}内を実行しろ)をしますが、これはなんと呼ばれる記述なのでしょうか?
型宣言とは違うと思いますが、名称がついているのであれば教えてください。

よろしくお願いいたします。

説明が足りないので、追記します
catch には、Exception か Exception のサブクラスを記述して、それらが発生しているときに、catch 内を実行することになると思いますが、そのException か Exception のサブクラスの部分に一般的な呼称があるのかを質問しています。

例えば、関数であれば

php

1function hoge(array $arr){ 2}

の array は型宣言、$arr は引数と呼称があるように catch の Exceptionにも呼び方があるか?という質問です。

質問が拙くて申し訳ない^^;

実験してみました
catch(InvalidArgumentException $e)TypeErrorを起こしているかの確認のつもりです。
(ちょっと自信ない^^;)

php

1<?php 2try{ 3 try{ 4 throw new ErrorException("error"); 5 } catch(InvalidArgumentException $e){ 6 echo '内部1:'; 7 echo $e->getMessage(); 8 } catch(ErrorException $e){ 9 echo '内部2:'; 10 echo $e->getMessage(); 11 } 12} catch(TypeError $e){ 13 echo '外部:'; 14 echo $e->getMessage(); 15 exit(); 16} 17//内部2:error

スクリプト自体に自信がないのですが、これを見ると型宣言では無いように思います。

aaaaaaaa👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/06/15 03:35

PHPではなく java なら 「引数型は ExceptionType ~」というようになってるから 例外型 となってるんだけど PHPはどこに記載されてるだろう。
m.ts10806

2018/06/15 06:33

構造的にはJavaを参考にした背景もあるはずなので「Javaと同じ!以上!」かもしれません。
退会済みユーザー

退会済みユーザー

2018/06/15 06:45

java の方も適当に漁ってるんですけど、納得いく呼称がないんですよねぇ。やっぱり無いのかなぁ。。。なんか拙い質問でかき回してすまんです^^;
m.ts10806

2018/06/15 06:46

いっそのこと te2jiさんがイケてる名前つけて広めて面白いかなと思ってきました。
退会済みユーザー

退会済みユーザー

2018/06/15 06:54

オレが命名するなら、「catch でつかう アレ」かなぁ。でもそれでイイ気がしてきたw
m.ts10806

2018/06/15 06:57

catchとセットなのでそれでいい気がしますね。
退会済みユーザー

退会済みユーザー

2018/06/15 07:12

そういえば パイプ宣言も真似してたな
退会済みユーザー

退会済みユーザー

2018/06/15 07:18

$e が引数なのか変数なのかさえわからんくなってきたorz
m.ts10806

2018/06/15 07:37

ひとまず変数なのは間違いないですね。慣習であってeである必要はないですし。
退会済みユーザー

退会済みユーザー

2018/06/15 08:29

Java では引数といってるw
guest

回答8

0

さまざまな型の例外を捕捉するために

これを読むと広義で「型宣言」と捉えられなくもないですね。

投稿2018/06/15 01:54

m.ts10806

総合スコア80875

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

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

退会済みユーザー

退会済みユーザー

2018/06/15 02:13

型宣言とは違うと思うんですよねぇ。。。 型によって処理を分岐するんで、宣言ではない気がします。 追記しましたので、ご存知であれば教えてください。
m.ts10806

2018/06/15 02:18

一応分かって回答したつもりでした。 マニュアルから読み解くと回答の太字部分が目に付いたので「広義で」としました。 Exception自体は例外の基底クラスなので、それに即した感じだとは思います。 Exception自体にThrowable インターフェイスを実装している(マニュアルより:http://php.net/manual/ja/class.exception.php) とあるのでそういった観点からも「型宣言に近いなぁ」という印象でした。 まあ、最終的にはどれかしっくりくる回答がつくでしょうね(他人任せ・・・)
退会済みユーザー

退会済みユーザー

2018/06/15 02:55

型宣言と同じフォーマットなのに、処理として条件分岐みたいなことをやらせるので、学習当初に相当混乱しました。 この辺を今まとめているのですけど、呼称として適当なものが見つからず^^; しっくり来る回答があるといいのですけど、もしかすると名称無いかもしれないですね。
m.ts10806

2018/06/15 02:59

PHPに限ったことではないですしね。 あくまでメインは try/catch構文の各ブロックの処理なので、そこにフォーカスがあたることがあまりないのかも。
mix-peach

2018/06/15 03:02

私も、Exception $e の「Exception」部分は、型宣言が一番近いと思いました。 phpの文法で考えるならば、()の中に入れるものの名称は「引数」と言えると思いますし、引数の頭に付くのは、「型宣言」ですよね・・ もしExceptionが発生していれば、それを $e とし、{}内を実行 というよりは、 Exceptionならここで受け取れるから、それを $e とし、{}内を実行 という感じかなぁ・・と。
退会済みユーザー

退会済みユーザー

2018/06/15 06:31

mix-peach さんの解釈、大変興味があったので実験してみました。 *質問に追記しました。 ちょっとスクリプトが意図した実験になっているか自信がないのですが、これを見る限りは、型宣言ではないように思います。 スクリプト、添削してもらえると幸いです^^;
退会済みユーザー

退会済みユーザー

2018/06/15 08:02 編集

この回答を支持します。 例外処理を呼ぶときに渡すパラメータが「特定の型であると保障するもの」であることから、「タイプヒンティング(型宣言)」と呼んでも違和感はないと(私だけかもしれないですが)考えています。 http://php.net/manual/ja/functions.arguments.php#functions.arguments.type-declaration > 型宣言を使うと、、関数を呼ぶ際に渡すパラメータが特定の型であることを、関数の宣言時に要求できるようになります。
mix-peach

2018/06/15 09:51

なるほど・・・確かに「型宣言であるならば、一致しないものを渡されればTypeErrorが発生する」のを検証のポイントにするのはありですね。その点で見て、TypeErrorは発生していないので、「型宣言」ではないという判断は正しい気がします。 ちなみにですが、「Exceptionならここで受け取れるから、それを $e とし、{}内を実行」は、if文よりswitch文に近いイメージで書きました。 リファレンスページにも、「例外が投げられた場合、その命令に続くコードは実行されず、 PHP は最初にマッチする catch ブロックを探します。」とあるので、処理的には「switch」が近いっぽいですし、マッチする判定に使うものを「予め書いている」のでやはり「受け入れるものカタチの宣言」という意味でも、やはり「型宣言」が一番近い気分・・ ただ、コメントのところで、「引数ではなく、変数」と書いてあるのをみて、こんな感じに予めクラスを宣言して作る方法があるなぁと思いいたりました。 class A(){ function hello(){ echo 'hello'; } } class B(){ function index(A $a){ $a->hello(); } } こんなことをすることがあります・・よね?(コードはてきとうに書いたので、間違ってたらすみません) こっちのほうが似てるきがしてきました。これだとクラスの「インスタンス生成」ということになるんでしょうかね・・?(←もはやただの迷子ですw)
退会済みユーザー

退会済みユーザー

2018/06/16 03:18

> _setsuna_ さん 型宣言だと、catch が関数でなければならず、かつ引数を取る際に型が違うとTypeError 出すんだと思うんです。 で、catch は関数じゃないし、$e は引数じゃない(多分変数)し、ちょっと違うかなぁと。 悩ましいです^^;
退会済みユーザー

退会済みユーザー

2018/06/16 03:21

> mix-peach さん 処理的には「switch」が近いっぽいって、たしかにそうですね。 yambejp さんの書いた「case Exeption as $e」って表現が非常にしっくり来ました。 めっちゃ迷子になってますw
guest

0

PHPリファレンス(try-catch) - 忘れっぽいエンジニアのPHPリファレンス

↑こちらでは「例外クラス名」と呼んでいるようです。

投稿2018/06/15 01:49

tkturbo

総合スコア5572

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

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

退会済みユーザー

退会済みユーザー

2018/06/15 02:16

ありがとうございます。 例外クラス名っていうのは正しいと思うんですけど、ちょっと質問内容とは違うんです。質問が拙くて申し訳ないです^^; 例外クラス名によって、処理が分岐されるので、その記述方法に名称がついていないかが知りたいのですが、ご存知でしょうか?
KazuhiroHatano

2018/06/15 04:38

確かに「補足型」とでも呼称するのが相応しい気がするのですが、StackOverflowのやり取りでもそれっぽい記述は見当たらず、 あえて言えば結局のところException classと呼ばれてたので 倣って「例外クラス名」と呼称するのがいい気がします
退会済みユーザー

退会済みユーザー

2018/06/16 03:14

> KazuhiroHatano さん 探していただいてありがとうございます。 「例外クラス名」を書く場所(?)をなんと言うのかが知りたいんですけど 名前ないっぽいですね^^;
guest

0

近そうなもので言語は違いますが、C++のtryブロックでは、catch句の例外オブジェクトの宣言する部分を「例外宣言(exception-declaration)」と呼んでいます。

参考資料

投稿2018/06/15 21:52

StupidDog

総合スコア263

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

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

退会済みユーザー

退会済みユーザー

2018/06/16 03:06

exception-declaration ですか。 結構しっくりきますね。 これが共通だったらいいなぁ。。。 情報、ありがとうございます。
StupidDog

2018/06/16 04:52

名前が無いと「この部分」とか説明が曖昧になるので、 名前が欲しいですよね。 公式に文法を定義したドキュメント(BNF)があるといいのですが...
guest

0

例えば C# では

C#

1try { 2 ... 3} catch (type identifier) { 4 ... 5}

と、catch「句」で、「型」と「変数」(合わせて「例外変数」)を指定しているという形で定義していますね。

これと同様に、「型」とするのが一番自然かと思います。

投稿2018/06/15 04:49

tacsheaven

総合スコア13703

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

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

退会済みユーザー

退会済みユーザー

2018/06/15 06:37

php でも型を表しているのは間違いないのですが、その呼称が知りたいです。 ちょっとうまく伝えられなくて恐縮ですが^^;
tacsheaven

2018/06/15 07:38

敢えて言うなら「例外の型」や「例外クラス」なのですけど、そもそも PHP では明示的に定義された名称はない、でしょう。(PHP の構文規則があれば分かるのですが) Java では try ~ catch 構文の定義の中で、CatchFormalParameter として定義され、その中では  CatchType VariableDeclaratorId となっているので、やはり「キャッチする型」になるでしょうか。 結局の所、そういうものである、と皆が認識しているので、名前付けなくても自明ではあるんですが。
退会済みユーザー

退会済みユーザー

2018/06/16 03:10

コメントありがとうございます。 もっとサクッと「これだよ」って出てくるかと思っていたんですが、php では名称無いっぽいですね。。。 お手数でなければ、Java の出典元教えてもらえないでしょうか? Java は普段ドキュメント探さないんで、何が正しいのかよくわからないんです^^;
退会済みユーザー

退会済みユーザー

2018/06/20 04:50

ありがとうございます!参考にします。
guest

0

記述名称が分かりません。

普通に「例外処理」ではダメですか?例外(exceptions)

マニュアルをざっと理解すれば「catchは例外を捕捉する」と読めます

投稿2018/06/15 01:50

編集2018/06/15 01:58
yambejp

総合スコア116694

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

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

退会済みユーザー

退会済みユーザー

2018/06/15 02:11

質問が拙くて申し訳ないです。 例外処理だと、catch を指す気がします。 追記しましたので、もしご存知であれば教えてください。
yambejp

2018/06/15 02:33

ああ、なるほど。質問をうまく理解できてませんでしたね Exception自体は組み込みのクラスで たとえば例外を拡張したとき try{ ・・・ }catch(Exception $e){ ・・・ }catch(MyException $e){ ・・・ } のように、受けるブロックを指定するためのものなので 「指定」というか「宣言」というかそういうものですね 正式な言い方はすみません、調べきれてません 似たような書式の「(int) $a」とかはキャストなのでちょっとちがいます switchのcaseに近い感じですかね「case Exeption as $e」的な 書き方(間違っているので注意)ならもっと直感的だったかもしれません
退会済みユーザー

退会済みユーザー

2018/06/15 02:50

> 「case Exeption as $e」的な あぁ、なんかしっくりきますw 型宣言と同じフォーマットなのに、処理が全然違うので学習当初に相当混乱しました。 catch でしか使用しない記述だと思うので、もしかすると名称無いのかもしれないですね。。。 ありがとうございます。
guest

0

「例外」と呼ばれます。

ExceptionのPHPマニュアル

投稿2018/06/15 01:48

編集2018/06/15 01:50
yuusuko

総合スコア145

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

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

退会済みユーザー

退会済みユーザー

2018/06/15 02:10

質問が拙くて申し訳ないです。 追記しましたので、もしご存知であれば教えてください。
guest

0

関数型プログラミングでよく使われるパターンマッチングにおける「型パターン」だと思います。

投稿2019/05/04 04:03

Zuishin

総合スコア28669

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

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

Zuishin

2019/05/04 04:19

例外オブジェクトを入れる変数を宣言しているので「宣言」でいいんじゃないかと思いますが、宣言された変数の型によってパターンマッチしているので、そこに着目するなら「パターン」と言うことも可能かと。
退会済みユーザー

退会済みユーザー

2019/05/04 08:20 編集

回答ありがとうございます。 振る舞いとしては、まさに型パターンですね。 しっくりきます。 ただ、構文的にも表現的にも「型パターン」ではないので、コレを根拠に「宣言/パターン」と呼ぶには違和感があります。 C# のドキュメントも見てみましたが、あっちでも「Exception」部分の呼称は定義されていないみたいです。 (山田 祥寛. 独習C#)では try-chach 構文の紹介で以下を採用していました。 catch (例外型 変数) ただ、これは例外型が「入る」ことを表す記述で、例外型の部分をどう呼ぶかの記述ではないように思います。 完全に迷子ですわw
guest

0

ExceptionってErrorとは違うし、とりあえず充てた日本語が例外となっているだけだよねぇ?
例外という日本語(?)にしっくりきてないから別の呼び方があるはずって思い込んでいるんだろうけども。

PHP7以降はPHP: PHP 7 でのエラー - Manualみたいな話もあるのですけども。
まずはPHP: 例外を拡張する - Manualにあるclass Exceptionの実装でも読んで落ち着いてみては。
class Errorもclass Exceptionもclass Throwableを継承したものらしいし。

投稿2018/06/15 02:36

編集2018/06/15 02:38
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/06/15 03:01

Exception 側の実装というより、多分 catch 側の実装による呼称じゃないかと思って調べています。 catch にしか使われない記法なので、名称無いのかもしれないですね。。。 もしご存知であれば、教えてください。
退会済みユーザー

退会済みユーザー

2018/06/15 03:08

もう、そういう仕組み、そういう記法で実現してます、って言わされてる感があってね。。 言語として美しくない気もするんですけども。
退会済みユーザー

退会済みユーザー

2018/06/15 07:02

型宣言と表現がかぶってるんで、別の名前でもついてないと、非常に初学者殺しなんですよねぇ。。。美しくない!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問