인터넷에서 오류와 예외의 차이점에 대한 대부분의 정보는 Java로 설명되어 있습니다. PHP의 예외 처리 프로세스는 Java의 예외 처리 프로세스와 유사한 것 같습니다. 오류와 예외의 차이점과 캡처를 알아보겠습니다. PHP가 필요한 친구들이 참고할 수 있습니다.
JSON 파싱 코드를 작성했습니다. 데이터 소스가 JSON임을 보장하지 않으므로 파싱이 실패할 수 있습니다. 그러나 PHP의 json_decode는 구문 분석할 수 없는 문자열을 발견할 때 오류를 보고하지 않으며 직접 빈 값을 반환합니다. 그리고 구문 분석이 가능하더라도 내부 필드가 항상 일관적이라는 것을 믿을 수 없습니다. 따라서 JSON으로 구문 분석할 수 있는지 여부뿐만 아니라 필드가 누락되었는지 여부도 확인해야 합니다. 게으른 나머지 예외만 잡아내고 싶은데, 예를 들어
Trying to get property of non-object
Trying to get property of non-object
但是,下面的 try catch 怎么也捕获不到异常
try { // Code that may throw an Exception or Error. } catch (\Exception $t) { // Handle exception }
Google 了一下,才知道,PHP 中除了 Exception 还有 Error 的概念,而 Trying to get property of non-object,很不幸就属于 Error。
PHP 中 error 与 exception 的区别
看了几篇关于 PHP error 和 exception 区别的介绍文章,感觉都没有说到点上。我突然想,我为啥一定要知道他们的区别,因为我觉得这个设计是有问题的。例如,PHP5 时代,try catch 只能捕获 Exception,而不能捕获 Error。我非常不能理解 PHP 5 这种设计的意义是什么?而 PHP7 的处理方式,说明了我的观点是正确的。所以,我就没有兴趣去深究其起初的设计思路了。
PHP 7 的新特性
From now on, most of the errors are reported through the exception class Error.
interface Throwable |- Error implements Throwable |- ArithmeticError extends Error |- DivisionByZeroError extends ArithmeticError |- AssertionError extends Error |- ParseError extends Error |- TypeError extends Error |- ArgumentCountError extends TypeError |- Exception implements Throwable |- ClosedGeneratorException extends Exception |- DOMException extends Exception |- ErrorException extends Exception |- IntlException extends Exception |- LogicException extends Exception |- BadFunctionCallException extends LogicException |- BadMethodCallException extends BadFunctionCallException |- DomainException extends LogicException |- InvalidArgumentException extends LogicException |- LengthException extends LogicException |- OutOfRangeException extends LogicException |- PharException extends Exception |- ReflectionException extends Exception |- RuntimeException extends Exception |- OutOfBoundsException extends RuntimeException |- OverflowException extends RuntimeException |- PDOException extends RuntimeException |- RangeException extends RuntimeException |- UnderflowException extends RuntimeException |- UnexpectedValueException extends RuntimeExceptionGoogle에서 검색한 후 , PHP에는 Exception 외에도 Error 개념이 있으며, 객체가 아닌 속성을 얻으려고 시도하는 것은 불행히도 Error에 해당한다는 것을 알았습니다. PHP의 오류와 예외의 차이점PHP의 오류와 예외의 차이점에 대한 소개 기사를 여러 개 읽었지만 요점을 건드리지 않은 것 같습니다. 문득, 이 디자인에 뭔가 문제가 있는 것 같아서 왜 둘의 차이점을 알아야 하느냐는 생각이 들었습니다. 예를 들어, PHP5 시대에는 try catch로 Exception만 잡을 수 있고 Error는 잡을 수 없습니다. PHP 5 디자인의 의미가 무엇인지 정말 이해할 수 없습니까? PHP7이 이를 처리하는 방식은 내 관점이 정확하다는 것을 보여줍니다. 그러므로 나는 그것의 원래 디자인 아이디어를 탐구하는 데 관심이 없습니다. PHP 7의 새로운 기능
이제부터 대부분의 오류는 Error 예외 클래스를 통해 보고됩니다.
즉, PHP 7부터는 Error와 Exception이 모두 Throwable에서 상속됩니다. .
Throwable의 상속 관계를 보면 Error와 Exception이 동일한 수준의 관계에 있음을 알 수 있습니다.
try { // Code that may throw an Exception or Error. } catch (\Throwable $t) { // Handle exception }
비객체의 속성을 가져오는 방법을 캡처합니다.
try { // Code that may throw an Exception or Error. } catch (\Throwable $t) { // Executed only in PHP 7, will not match in PHP 5.x } catch (\Exception $e) { // Executed only in PHP 5.x, will not be reached in PHP 7 }
PHP 5 및 PHP 7 작성 방법과 모두 호환됩니다.
{ public function getMessage(): string; // Error reason public function getCode(): int; // Error code public function getFile(): string; // Error begin file public function getLine(): int; // Error begin line public function getTrace(): array; // Return stack trace as array like debug_backtrace() public function getTraceAsString(): string; // Return stack trace as string public function getPrevious(): Throwable; // Return previous `Trowable` public function __toString(): string; // Convert into string }
일부 내장 방법
인터페이스 Throwable
rrreee
특정 정보를 기록합니다. 예외예를 들어오류 코드 파일, 줄 번호, 특정 오류 메시지, 오류 유형
더 정확한 캡처 또는 더 넓은 캡처를 사용🎜🎜또는 점수 상황🎜🎜예를 들어 MySQL의 고유 인덱스 예외, 정확한 캡처에 익숙합니다. . 특별한 처리가 필요하기 때문입니다. 🎜🎜다른 대부분의 경우에는 Throwable을 광범위하게 캡처하는 것 같아요. 그 이유는 try catch가 일반적으로 논리에 영향을 주지 않는 낮은 확률의 예외와 같은 예외를 무시하는 데 사용되기 때문입니다. 처리할 필요가 없으므로 로그가 기록되는 한 특정 예외는 그다지 중요하지 않습니다. 🎜🎜추천 학습: 🎜php 비디오 튜토리얼🎜🎜위 내용은 PHP에서 오류와 예외의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!