다음 기능을 블록에 캡처하는 더 깔끔한 방법을 원합니다. AError
和 BError
:
이것을 할 수 있는 방법이 있나요? 아니면 개별적으로 캡쳐해야 하나요?
AError
和 Berror
有一个共享基类,但它们也与我想落入 handler2
다른 유형에서 공유하므로 기본 클래스만 캡처할 수는 없습니다.
P粉7774587872023-10-15 15:07:15
이것은 PHP >= 7.1에서 가능합니다. 이 답변을 참조하세요.
예외 사항을 수정할 수 있는 경우 이 답변을 사용해 주세요.
그렇지 않다면 Exception
捕获所有异常,然后使用 instanceof
을 사용해 보세요.
하지만 위의 답변에서 언급한 대로 여러 개의 캐치 블록을 사용하는 것이 더 .
으아아아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
다른 답변에서 말하는 내용에도 불구하고 동일한 블록에서 AError
和 BError
를 잡을 수 있습니다(예외를 정의하는 사람이라면 더 쉽습니다). "제외"하려는 예외가 있더라도 필요에 맞게 계층 구조를 정의할 수 있어야 합니다.
그런 다음:
으아악보시다시피 여기와 여기에도 SPL
기본 예외에도 악용될 수 있는 계층 구조가 있습니다. 또한 PHP Manual에 명시된 대로:
당신도 가질 수 있다는 뜻이에요
으아악 AError
或 BError
과 다르게 처리해야 하므로 catch 문은 다음과 같습니다.
동일한 슈퍼클래스에 합법적으로 속하는 20개 이상의 예외가 있고 그 중 5개(또는 대규모 그룹)를 한 가지 방법으로 처리하고 나머지는 다른 방법으로 처리해야 하는 경우에도 여전히 그렇게 할 수 있습니다.
으아악그런 다음:
으아악예외 처리 시 OOP를 사용하는 것은 매우 강력합니다. get_class
或 instanceof
같은 것을 사용하는 것은 해킹이므로 가능하면 피해야 합니다.
추가하고 싶은 또 다른 솔루션은 예외 처리 기능을 자체 메서드에 넣는 것입니다.
드셔도 됩니다
으아악예외 클래스 계층 구조나 인터페이스를 제어할 수 있는 방법이 전혀 없다고 가정하면(거의 항상 방법이 있을 것임) 다음을 수행할 수 있습니다.
으아악이렇게 하면 예외 처리 메커니즘을 변경해야 하는 경우 수정해야 할 코드 위치가 하나 뿐이며 OOP의 일반 구조 내에서 작업하게 됩니다.