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

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

ただいまの
回答率

90.84%

  • PHP

    18629questions

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

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

受付中

回答 7

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 375

te2ji

score 10274

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

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

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

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

例えば、関数であれば

function hoge(array $arr){
}


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

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

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

<?php
try{
    try{
        throw new ErrorException("error");
    } catch(InvalidArgumentException $e){
        echo '内部1:';
        echo $e->getMessage();
    } catch(ErrorException $e){
        echo '内部2:';
        echo $e->getMessage();
    }
} catch(TypeError $e){
    echo '外部:';
    echo $e->getMessage();
    exit();
} 
//内部2:error


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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • te2ji

    2018/06/15 16:18

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

    キャンセル

  • mts10806

    2018/06/15 16:37

    ひとまず変数なのは間違いないですね。慣習であってeである必要はないですし。

    キャンセル

  • asahina1979

    2018/06/15 17:29

    Java では引数といってるw

    キャンセル

回答 7

+3

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/15 11:13

    型宣言とは違うと思うんですよねぇ。。。
    型によって処理を分岐するんで、宣言ではない気がします。

    追記しましたので、ご存知であれば教えてください。

    キャンセル

  • 2018/06/15 11:18

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

    まあ、最終的にはどれかしっくりくる回答がつくでしょうね(他人任せ・・・)

    キャンセル

  • 2018/06/15 11:55

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

    キャンセル

  • 2018/06/15 11:59

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

    キャンセル

  • 2018/06/15 12:02

    私も、Exception $e の「Exception」部分は、型宣言が一番近いと思いました。

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

    キャンセル

  • 2018/06/15 15:31

    mix-peach さんの解釈、大変興味があったので実験してみました。
    *質問に追記しました。

    ちょっとスクリプトが意図した実験になっているか自信がないのですが、これを見る限りは、型宣言ではないように思います。
    スクリプト、添削してもらえると幸いです^^;

    キャンセル

  • 2018/06/15 17:01 編集

    この回答を支持します。
    例外処理を呼ぶときに渡すパラメータが「特定の型であると保障するもの」であることから、「タイプヒンティング(型宣言)」と呼んでも違和感はないと(私だけかもしれないですが)考えています。

    http://php.net/manual/ja/functions.arguments.php#functions.arguments.type-declaration
    > 型宣言を使うと、、関数を呼ぶ際に渡すパラメータが特定の型であることを、関数の宣言時に要求できるようになります。

    キャンセル

  • 2018/06/15 18: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 12:18

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

    キャンセル

  • 2018/06/16 12:21

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

    めっちゃ迷子になってますw

    キャンセル

+2

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/15 11:16

    ありがとうございます。
    例外クラス名っていうのは正しいと思うんですけど、ちょっと質問内容とは違うんです。質問が拙くて申し訳ないです^^;

    例外クラス名によって、処理が分岐されるので、その記述方法に名称がついていないかが知りたいのですが、ご存知でしょうか?

    キャンセル

  • 2018/06/15 13:38

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

    キャンセル

  • 2018/06/16 12:14

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

    キャンセル

+1

「例外」と呼ばれます。

ExceptionのPHPマニュアル

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/15 11:10

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

    キャンセル

+1

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/15 11:11

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

    キャンセル

  • 2018/06/15 11:33

    ああ、なるほど。質問をうまく理解できてませんでしたね

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

    キャンセル

  • 2018/06/15 11:35

    マニュアルの例外の拡張に関する記述がわかりやすいかもしれません

    http://php.net/manual/ja/language.exceptions.extending.php

    キャンセル

  • 2018/06/15 11:50

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

    キャンセル

+1

例えば C# では

try {
  ...
} catch (type identifier) {
  ...
}


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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/15 15:37

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

    キャンセル

  • 2018/06/15 16:38

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

    キャンセル

  • 2018/06/16 12:10

    コメントありがとうございます。
    もっとサクッと「これだよ」って出てくるかと思っていたんですが、php では名称無いっぽいですね。。。

    お手数でなければ、Java の出典元教えてもらえないでしょうか?
    Java は普段ドキュメント探さないんで、何が正しいのかよくわからないんです^^;

    キャンセル

  • 2018/06/16 21:42

    Oracle 社の Web Site https://docs.oracle.com/javase/specs/index.html にある、The Java Language Specification です。その中の try statement に関する記述にあります。JavaSE 10 では以下。
    https://docs.oracle.com/javase/specs/jls/se10/html/jls-14.html#jls-14.20

    キャンセル

  • 2018/06/20 13:50

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

    キャンセル

+1

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

参考資料

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/16 12:06

    exception-declaration ですか。
    結構しっくりきますね。
    これが共通だったらいいなぁ。。。

    情報、ありがとうございます。

    キャンセル

  • 2018/06/16 13:52

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

    キャンセル

0

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/15 12:01

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

    キャンセル

  • 2018/06/15 12:08

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

    キャンセル

  • 2018/06/15 16:02

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

    キャンセル

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    PHP+Facebook APIでの外部からの投稿方法について

    前提・実現したいこと お世話になります。 現在PHP+Facebook APIで外部からの投稿でFacebookの個人アカウントへの投稿する方法で苦戦しております。 ひと

  • 解決済

    PHP、PDOの例外処理について

    PDO利用時の例外処理について 調べてもどれがベストなのか、正解が出てこなかったので質問させてください。 PDOのエラー発生時に例外を投げるように設定しています。 t

  • 受付中

    php mysqlから画像を取り出す方法

    <?php include "php/config.php"; se

  • 解決済

    エラーの検知がうまくできない

    <form action="" method="post" id="signup2"> <p> メールア

  • 解決済

    PHPの例外処理について

    例外処理のcatch()の()の部分はどのような意味なのでしょうか? 例えば、 try{ $obj = new SplFileObject($file, "rb");

  • 解決済

    PHP 例外処理任意の例外検知

    例外処理についてです。 データベースなどを扱う際tryでデータベースの部分を囲みエラーを検知するなどの使い方があると思いますが、catchの部分で任意のエラーを検知する方法ってあり

  • 解決済

    繰り返しプリペアドステートメント(PHP, PDO)

    AND条件でDBに検索をかけたい PHPで任意の文字列を含むレコードを検索するシステムを作っています。 文字列は半角スペースで分解して、2つ以上単語でAND検索をかけたい。 S

  • 解決済

    php 多次元配列の分割

     前提・実現したいこと 多次元配列を一定の間隔に分割したい。 下記のようにする関数設定はありますでしょうか、もしくは自作されている方いらっしゃいますでしょうか。  該当のソース

同じタグがついた質問を見る

  • PHP

    18629questions

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