PHP7 오류 및 예외 처리 예제 공유
오류와 예외의 유사점과 차이점
"오류"와 "예외"의 개념은 매우 유사하며 쉽게 혼동될 수 있습니다. "오류"와 "예외"는 모두 프로젝트에 문제가 있음을 나타내며 둘 다 제공합니다. 관련 정보가 있으며 둘 다 오류 유형이 있습니다. 그러나 "오류 메커니즘" 다음에 "예외 메커니즘"이 등장했으며, "예외"는 "오류"를 피할 수 없다는 단점이 있습니다. 더 중요한 점은 "오류" 정보가 풍부하지 않다는 것입니다. 우리가 본 가장 일반적인 함수 설명은 성공하면 ***를 반환하고, 오류가 발생하면 FALSE를 반환하는 것입니다. , 및 오류 유형이 더 있습니다. 간단한 FALSE는 호출자에게 특정 오류 메시지를 알릴 수 없습니다.
PHP에서는 코드 자체 예외(일반적으로 환경 또는 잘못된 구문으로 인해 발생)가 오류가 되며, 예외 오류는 코드로 처리할 수 없으며 예외는 try/catch로 처리할 수 있습니다.
Exceptions
예외는 돌이킬 수 없는 상황이 발생할 때 발생하는 Exception 클래스의 객체입니다. 예외는 책임을 사전에 위임하고 잠재적인 문제를 예측하고 그 영향을 완화하기 위해 방어적으로 사용될 수도 있습니다.
Exception 개체에는 두 가지 주요 속성이 있습니다. 하나는 메시지이고 다른 하나는 숫자 코드입니다. getCode() 및 getMessage()를 각각 사용하여 이 두 가지 속성을 얻을 수 있습니다. 다음과 같습니다:
<?php $exception = new Exception("figthing!!!",100); $code = $exception->getCode();//100 $message = $exception->getMessage();//fight.....
예외 발생
예외가 발생하면 코드 실행이 즉시 중지되고 후속 코드는 더 이상 실행되지 않습니다. PHP는 일치하는 "catch" 코드 블록을 찾으려고 시도합니다. 예외가 포착되지 않고 set_Exception_handler()를 사용하여 적절하게 처리되지 않으면 PHP는 심각한 오류를 생성하고 Uncaught Exception... 메시지를 출력합니다.
throw new Exception("this is a exception");//使用throw抛出异常
Catch 예외
우리는 던져진 예외를 잡아서 우아한 방식으로 처리해야 합니다. 예외를 가로채서 처리하는 방법은 예외를 발생시킬 수 있는 코드를 try/catch 블록에 넣는 것입니다. 그리고 여러 예외를 가로채기 위해 여러 개의 catch를 사용하는 경우 그 중 하나만 실행됩니다. PHP가 적절한 catch 블록을 찾지 못하면 치명적인 오류로 인해 PHP 스크립트가 종료될 때까지 예외가 발생합니다. 다음과 같습니다:
try { throw new Exception("Error Processing Request"); $pdo = new PDO("mysql://host=wrong_host;dbname=wrong_name"); } catch (PDOException $e) { echo "pdo error!"; } catch(Exception $e){ echo "exception!"; }finally{ echo "end!";//finally是在捕获到任何类型的异常后都会运行的一段代码 }
运行结果:exception!end!
Exception handler
그러면 발생할 수 있는 모든 예외를 어떻게 잡아야 할까요? PHP를 사용하면 포착되지 않은 모든 예외를 포착하는 전역 예외 처리기를 등록할 수 있습니다. 예외 처리기는 set_Exception_handler() 함수를 사용하여 등록됩니다(여기서는 익명 함수가 사용됩니다).
set_exception_handler(function (Exception $e) { echo "我自己定义的异常处理".$e->getMessage(); }); throw new Exception("this is a exception"); //运行结果:我自己定义的异常处理this is a exception
Errors
예외 외에도 PHP는 오류 보고 기능도 제공합니다. PHP는 치명적인 오류, 런타임 오류, 컴파일 타임 오류, 시작 오류, 사용자에 의해 발생한 오류 등 다양한 유형의 오류를 유발할 수 있습니다. 오류 보고 방법은 php.ini에서 설정할 수 있습니다(여기서는 추가 설명 없음)
몇 가지 오류 보고 수준은 다음과 같습니다.
值 常量 说明1 E_ERROR 报告导致脚本终止运行的致命错误2 E_WARNING 报告运行时的警告类错误(脚本不会终止运行)4 E_PARSE 报告编译时的语法解析错误8 E_NOTICE 报告通知类错误,脚本可能会产生错误32767 E_ALL 报告所有的可能出现的错误(不同的PHP版本,常量E_ALL的值也可能不同)
어쨌든 다음 규칙을 따라야 합니다.
PHP에서 보고하도록 해야 합니다. 오류
오류는 개발 환경에서 표시되어야 합니다
오류는 프로덕션 환경에서 표시될 수 없습니다
오류는 개발 환경과 프로덕션 환경 모두에서 기록되어야 합니다
오류 처리기
및 예외 처리기 마찬가지로 set_error_handler()를 사용하여 전역 오류 처리기를 등록하고 자체 논리를 사용하여 PHP 오류를 가로채고 처리할 수도 있습니다. 오류 처리기에서 die() 또는 exit() 함수를 호출해야 합니다. 호출되지 않으면 PHP 스크립트는 오류가 발생한 지점부터 계속 실행됩니다. 다음과 같습니다:
set_error_handler(function ($errno,$errstr,$errfile,$errline)//常用的四个参数 { echo "错误等级:".$errno."<br>错误信息:".$errstr."<br>错误的文件名:".$errfile."<br>错误的行号:".$errline; exit(); }); trigger_error("this is a error");//自行触发的错误 echo '正常';
실행 결과:
오류 수준: 1024
오류 메시지: 오류입니다
오류 파일 이름: /Users/toby/Desktop/www/Exception.php
오류 줄 번호: 33
관련 있음 또한 함수register_shutdown_function()---PHP가 종료될 때 실행될 함수입니다. (관심 있으신 분들은 직접 확인해보세요)
오류를 예외로 변환
PHP 오류를 예외로 변환할 수 있습니다. (모든 오류를 변환할 수 있는 것은 아니며 php.ini 파일의 error_reporting 지시어에 의해 설정된 오류만 변환), 예외 처리를 위해 기존 프로세스를 사용하여 오류를 처리합니다. 여기서는 set_error_handler() 함수를 사용하여 오류 정보를 ErrorException(Exception의 하위 클래스)에 호스팅한 다음 처리를 위해 기존 예외 처리 시스템에 넘겨줍니다. 다음과 같습니다:
set_exception_handler(function (Exception $e) { echo "我自己定义的异常处理".$e->getMessage(); }); set_error_handler(function ($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline);//转换为异常 }); trigger_error("this is a error");//自行触发错误
작업 결과: 내가 정의한 예외 처리는 오류입니다
PHP7 오류 예외 처리
PHP 7 改变了大多数错误的报告方式。不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为 Error 异常抛出。
这种 Error 异常可以像 Exception 异常一样被第一个匹配的 try / catch 块所捕获。如果没有匹配的 catch 块,则调用异常处理函数(事先通过 set_exception_handler() 注册)进行处理。 如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error)。
Error 类并非继承自 Exception 类,所以不能用 catch (Exception $e) { ... } 来捕获 Error。你可以用 catch (Error $e) { ... },或者通过注册异常处理函数( set_exception_handler())来捕获 Error。
$a=1; try { $a->abc();//未定义此对象 } catch (Exception $e) { echo "error"; } catch (Error $e) { echo $e->getCode(); }
运行结果:0
PHP7 中出现了 Throwable 接口,该接口由 Error 和 Exception 实现,用户不能直接实现 Throwable 接口,而只能通过继承 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 }
注意实际项目中,在开发环境中我们可以使用Whoops组件,在生产环境中我们可以使用Monolog组件。
相关推荐:
위 내용은 PHP7 오류 및 예외 처리 예제 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

Docker 환경을 사용할 때 Docker 환경에 Extensions를 설치하기 위해 PECL을 사용하여 오류의 원인 및 솔루션. 종종 일부 두통이 발생합니다 ...

PHP의 마법 방법은 무엇입니까? PHP의 마법 방법은 다음과 같습니다. 1. \ _ \ _ Construct, 객체를 초기화하는 데 사용됩니다. 2. \ _ \ _ 파괴, 자원을 정리하는 데 사용됩니다. 3. \ _ \ _ 호출, 존재하지 않는 메소드 호출을 처리하십시오. 4. \ _ \ _ get, 동적 속성 액세스를 구현하십시오. 5. \ _ \ _ Set, 동적 속성 설정을 구현하십시오. 이러한 방법은 특정 상황에서 자동으로 호출되어 코드 유연성과 효율성을 향상시킵니다.

PHP와 Python은 각각 고유 한 장점이 있으며 프로젝트 요구 사항에 따라 선택합니다. 1.PHP는 웹 개발, 특히 웹 사이트의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 간결한 구문을 가진 데이터 과학, 기계 학습 및 인공 지능에 적합하며 초보자에게 적합합니다.

PHP는 전자 상거래, 컨텐츠 관리 시스템 및 API 개발에 널리 사용됩니다. 1) 전자 상거래 : 쇼핑 카트 기능 및 지불 처리에 사용됩니다. 2) 컨텐츠 관리 시스템 : 동적 컨텐츠 생성 및 사용자 관리에 사용됩니다. 3) API 개발 : 편안한 API 개발 및 API 보안에 사용됩니다. 성능 최적화 및 모범 사례를 통해 PHP 애플리케이션의 효율성과 유지 보수 성이 향상됩니다.

PHP는 서버 측에서 널리 사용되는 스크립팅 언어이며 특히 웹 개발에 적합합니다. 1.PHP는 HTML을 포함하고 HTTP 요청 및 응답을 처리 할 수 있으며 다양한 데이터베이스를 지원할 수 있습니다. 2.PHP는 강력한 커뮤니티 지원 및 오픈 소스 리소스를 통해 동적 웹 컨텐츠, 프로세스 양식 데이터, 액세스 데이터베이스 등을 생성하는 데 사용됩니다. 3. PHP는 해석 된 언어이며, 실행 프로세스에는 어휘 분석, 문법 분석, 편집 및 실행이 포함됩니다. 4. PHP는 사용자 등록 시스템과 같은 고급 응용 프로그램을 위해 MySQL과 결합 할 수 있습니다. 5. PHP를 디버깅 할 때 error_reporting () 및 var_dump ()와 같은 함수를 사용할 수 있습니다. 6. 캐싱 메커니즘을 사용하여 PHP 코드를 최적화하고 데이터베이스 쿼리를 최적화하며 내장 기능을 사용하십시오. 7

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.
