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