백엔드 개발 PHP 문제 PHP에서 오류와 예외의 차이점은 무엇입니까

PHP에서 오류와 예외의 차이점은 무엇입니까

Jun 23, 2021 pm 04:19 PM
php

인터넷에서 오류와 예외의 차이점에 대한 대부분의 정보는 Java로 설명되어 있습니다. PHP의 예외 처리 프로세스는 Java의 예외 처리 프로세스와 유사한 것 같습니다. 오류와 예외의 차이점과 캡처를 알아보겠습니다. PHP가 필요한 친구들이 참고할 수 있습니다.

PHP에서 오류와 예외의 차이점은 무엇입니까

JSON 파싱 코드를 작성했습니다. 데이터 소스가 JSON임을 보장하지 않으므로 파싱이 실패할 수 있습니다. 그러나 PHP의 json_decode는 구문 분석할 수 없는 문자열을 발견할 때 오류를 보고하지 않으며 직접 빈 값을 반환합니다. 그리고 구문 분석이 가능하더라도 내부 필드가 항상 일관적이라는 것을 믿을 수 없습니다. 따라서 JSON으로 구문 분석할 수 있는지 여부뿐만 아니라 필드가 누락되었는지 여부도 확인해야 합니다. 게으른 나머지 예외만 잡아내고 싶은데, 예를 들어

Trying to get property of non-objectTrying 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.

그러나 다음 try catch로는 예외를 잡을 수 없습니다

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 RuntimeException
로그인 후 복사

Google에서 검색한 후 , 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 데이터베이스 작업 CakePHP 데이터베이스 작업 Sep 10, 2024 pm 05:25 PM

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

이번 장에서는 라우팅과 관련된 다음과 같은 주제를 학습하겠습니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

See all articles