찾다

 >  Q&A  >  본문

catch 블록에서 여러 예외 유형을 결합합니다.

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

으아아아

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

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

P粉547420474P粉547420474426일 전623

모든 응답(2)나는 대답할 것이다

  • P粉777458787

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

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


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

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

    으아아아

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

    으아아아

    회신하다
    0
  • P粉611456309

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

    업데이트:

    이 기능은 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의 일반 구조 내에서 작업하게 됩니다.

    회신하다
    0
  • 취소회신하다