AError と BError を 1 つのブロックでキャッチする次の機能を取得する、よりクリーンな方法が欲しいです。
AError
BError
これを行う方法はありますか?それとも個別にキャプチャする必要がありますか?
AError と Berror には共有基本クラスがありますが、handler2 に分類したい他の型とも共有されているため、基本的な種類をキャプチャするだけではありません。
Berror
handler2
これは PHP 7.1 以上で可能です。この 回答 を参照してください。
例外を変更できる場合は、 この回答を使用してください 。
そうでない場合は、Exception を使用してすべての例外をキャッチしてから、instanceof を使用してください。
Exception
instanceof
しかし 上の回答で述べたように、複数の catch ブロックを使用する方が良いです .
この機能は、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
これらの他の回答が何と言っているかにもかかわらず、同じブロックで AError と BError の両方をキャッチできます (例外を定義しているのが自分の場合は簡単です)。 「除外」したい例外がある場合でも、ニーズに合わせて階層を定義できるはずです。
とここからわかるように、SPL デフォルト例外にも悪用される可能性のある階層があります。さらに、PHP マニュアル : に記載されているように、 これは、
PHP マニュアル
や BError とは異なる方法で処理する必要があるため、catch ステートメントは次のようになります: リーリー 同じスーパークラスに正当に属する例外が 20 個以上あり、そのうちの 5 個 (または大きなグループ) を 1 つの方法で処理し、残りを別の方法で処理する必要がある状況があるとします。 、まだできます。
リーリー
OOP の使用は、例外を処理するときに非常に強力です。
や
などの使用はハックであるため、可能であれば避けてください。 私が追加したいもう 1 つの解決策は、例外処理機能を独自のメソッドに組み込むことです。 ###あなたが持つことができます### リーリー 例外クラスの階層またはインターフェイスを制御する方法がまったくないと仮定すると (ほとんどの場合、
###あなたが持つことができます### リーリー
これは PHP 7.1 以上で可能です。この 回答 を参照してください。
例外を変更できる場合は、 この回答を使用してください 。
そうでない場合は、
リーリーException
を使用してすべての例外をキャッチしてから、instanceof
を使用してください。しかし 上の回答で述べたように、複数の catch ブロックを使用する方が良いです .
リーリー更新:
この機能は、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 より前のバージョンの場合:
これらの他の回答が何と言っているかにもかかわらず、同じブロックで
リーリー ###それから:### リーリー ここAError
とBError
の両方をキャッチできます (例外を定義しているのが自分の場合は簡単です)。 「除外」したい例外がある場合でも、ニーズに合わせて階層を定義できるはずです。とここからわかるように、SPL デフォルト例外にも悪用される可能性のある階層があります。さらに、
も使用できることを意味します リーリー AErrorPHP マニュアル
: に記載されているように、 これは、や
リーリー ###それから:### リーリーBError
とは異なる方法で処理する必要があるため、catch ステートメントは次のようになります:リーリー
同じスーパークラスに正当に属する例外が 20 個以上あり、そのうちの 5 個 (または大きなグループ) を 1 つの方法で処理し、残りを別の方法で処理する必要がある状況があるとします。 、まだできます。OOP の使用は、例外を処理するときに非常に強力です。
get_classや
instanceofなどの使用はハックであるため、可能であれば避けてください。
私が追加したいもう 1 つの解決策は、例外処理機能を独自のメソッドに組み込むことです。
方法は存在します)、次のことができます。###あなたが持つことができます### リーリー
例外クラスの階層またはインターフェイスを制御する方法がまったくないと仮定すると (ほとんどの場合、リーリー
これにより、例外処理メカニズムを変更する必要がある場合でも、変更する必要があるコードの場所は 1 つだけになり、OOP の一般的な構造内で作業することになります。