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

다음 기능을 블록에 캡처하는 더 깔끔한 방법을 원합니다. 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 학습자의 빠른 성장을 도와주세요!