catch 블록에서 여러 예외 유형을 결합합니다.
P粉547420474
P粉547420474 2023-10-14 16:57:18
0
2
478

다음 기능을 블록에 캡처하는 더 깔끔한 방법을 원합니다.AErrorBError:

으아아아

이것을 할 수 있는 방법이 있나요? 아니면 개별적으로 캡쳐해야 하나요?

AErrorBerror有一个共享基类,但它们也与我想落入handler2다른 유형에서 공유하므로 기본 클래스만 캡처할 수는 없습니다.

P粉547420474
P粉547420474

모든 응답 (2)
P粉777458787

이것은 PHP >= 7.1에서 가능합니다. 이답변을 참조하세요.


예외 사항을 수정할 수 있는 경우이 답변을 사용해 주세요.

그렇지 않다면Exception捕获所有异常,然后使用instanceof을 사용해 보세요.

으아아아

하지만위의 답변에서 언급한 대로 여러 개의 캐치 블록을 사용하는 것이 더.

으아아아
    P粉611456309

    업데이트:

    이 기능은 PHP 7.1부터 사용할 수 있습니다.

    구문은 다음과 같습니다.

    으아악

    문서:https://www.php.net/manual/en/언어.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 Manual에 명시된 대로:

    당신도 가질 수 있다는 뜻이에요

    으아악

    AErrorBError과 다르게 처리해야 하므로 catch 문은 다음과 같습니다.

    으아악

    동일한 슈퍼클래스에 합법적으로 속하는 20개 이상의 예외가 있고 그 중 5개(또는 대규모 그룹)를 한 가지 방법으로 처리하고 나머지는 다른 방법으로 처리해야 하는 경우에도 여전히 그렇게 할 수 있습니다.

    으아악

    그런 다음:

    으아악

    예외 처리 시 OOP를 사용하는 것은 매우 강력합니다.get_classinstanceof같은 것을 사용하는 것은 해킹이므로 가능하면 피해야 합니다.

    추가하고 싶은 또 다른 솔루션은 예외 처리 기능을 자체 메서드에 넣는 것입니다.

    드셔도 됩니다

    으아악

    예외 클래스 계층 구조나 인터페이스를 제어할 수 있는 방법이 전혀 없다고 가정하면(거의 항상방법이있을 것임) 다음을 수행할 수 있습니다.

    으아악

    이렇게 하면 예외 처리 메커니즘을 변경해야 하는 경우 수정해야 할 코드 위치가 하나 뿐이며 OOP의 일반 구조 내에서 작업하게 됩니다.

      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿
      회사 소개 부인 성명 Sitemap
      PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!