catch ブロック内で複数の例外タイプを結合する
P粉547420474
P粉547420474 2023-10-14 16:57:18
0
2
535

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

リーリー

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

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

P粉547420474
P粉547420474

全員に返信(2)
P粉777458787

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


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

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

リーリー

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

リーリー
いいねを押す +0
P粉611456309

更新:

この機能は、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
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!