ホームページ  >  に質問  >  本文

catch ブロック内で複数の例外タイプを結合する

AErrorBError を 1 つのブロックでキャッチする次の機能を取得する、よりクリーンな方法が欲しいです。

リーリー

これを行う方法はありますか?それとも個別にキャプチャする必要がありますか?

AErrorBerror には共有基本クラスがありますが、handler2 に分類したい他の型とも共有されているため、基本的な種類をキャプチャするだけではありません。

P粉547420474P粉547420474388日前601

全員に返信(2)返信します

  • P粉777458787

    P粉7774587872023-10-15 15:07:15

    これは PHP 7.1 以上で可能です。この 回答 を参照してください。


    例外を変更できる場合は、 この回答を使用してください

    そうでない場合は、Exception を使用してすべての例外をキャッチしてから、instanceof を使用してください。

    リーリー

    しかし 上の回答で述べたように、複数の catch ブロックを使用する方が良いです .

    リーリー

    返事
    0
  • P粉611456309

    P粉6114563092023-10-15 00:46:51

    更新:

    この機能は、PHP 7.1 以降で利用可能です。

    構文は次のとおりです:

    リーリー

    ドキュメント: https://www.php.net/manual/en/ language.Exceptions.php#example-334

    #RFC: https://wiki.php.net/rfc/multiple-catch

    コミット:https://github.com/php/php-src/commit/0aed2cc2a440e7be17552cc669d71fdd24d1204a


    PHP 7.1 より前のバージョンの場合:

    これらの他の回答が何と言っているかにもかかわらず、同じブロックで AErrorBError の両方をキャッチできます (例外を定義しているのが自分の場合は簡単です)。 「除外」したい例外がある場合でも、ニーズに合わせて階層を定義できるはずです。

    リーリー ###それから:### リーリー

    ここ

    ここからわかるように、SPL デフォルト例外にも悪用される可能性のある階層があります。さらに、PHP マニュアル : に記載されているように、 これは、

    も使用できることを意味します リーリー

    AError

    BError とは異なる方法で処理する必要があるため、catch ステートメントは次のようになります: リーリー 同じスーパークラスに正当に属する例外が 20 個以上あり、そのうちの 5 個 (または大きなグループ) を 1 つの方法で処理し、残りを別の方法で処理する必要がある状況があるとします。 、まだできます。

    リーリー ###それから:### リーリー

    OOP の使用は、例外を処理するときに非常に強力です。

    get_class

    instanceof

    などの使用はハックであるため、可能であれば避けてください。 私が追加したいもう 1 つの解決策は、例外処理機能を独自のメソッドに組み込むことです。 ###あなたが持つことができます### リーリー 例外クラスの階層またはインターフェイスを制御する方法がまったくないと仮定すると (ほとんどの場合、

    方法は存在します)、次のことができます。

    リーリー

    これにより、例外処理メカニズムを変更する必要がある場合でも、変更する必要があるコードの場所は 1 つだけになり、OOP の一般的な構造内で作業することになります。

    返事
    0
  • キャンセル返事