오류와 예외의 유사점과 차이점
"오류"와 "예외"의 개념은 매우 유사하며 쉽게 혼동될 수 있습니다. "오류"와 "예외"는 모두 프로젝트에 문제가 있음을 나타내며 둘 다 제공합니다. 관련 정보가 있으며 둘 다 오류 유형이 있습니다. 그러나 "오류 메커니즘" 다음에 "예외 메커니즘"이 등장했으며, "예외"는 "오류"를 피할 수 없다는 단점이 있습니다. 더 중요한 점은 "오류" 정보가 풍부하지 않다는 것입니다. 우리가 본 가장 일반적인 함수 설명은 성공하면 ***를 반환하고, 오류가 발생하면 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

PHP는 현대적인 프로그래밍, 특히 웹 개발 분야에서 강력하고 널리 사용되는 도구로 남아 있습니다. 1) PHP는 사용하기 쉽고 데이터베이스와 완벽하게 통합되며 많은 개발자에게 가장 먼저 선택됩니다. 2) 동적 컨텐츠 생성 및 객체 지향 프로그래밍을 지원하여 웹 사이트를 신속하게 작성하고 유지 관리하는 데 적합합니다. 3) 데이터베이스 쿼리를 캐싱하고 최적화함으로써 PHP의 성능을 향상시킬 수 있으며, 광범위한 커뮤니티와 풍부한 생태계는 오늘날의 기술 스택에 여전히 중요합니다.

PHP에서는 약한 참조가 약한 회의 클래스를 통해 구현되며 쓰레기 수집가가 물체를 되 찾는 것을 방해하지 않습니다. 약한 참조는 캐싱 시스템 및 이벤트 리스너와 같은 시나리오에 적합합니다. 물체의 생존을 보장 할 수 없으며 쓰레기 수집이 지연 될 수 있음에 주목해야합니다.

\ _ \ _ 호출 메소드를 사용하면 객체를 함수처럼 호출 할 수 있습니다. 1. 객체를 호출 할 수 있도록 메소드를 호출하는 \ _ \ _ 정의하십시오. 2. $ obj (...) 구문을 사용할 때 PHP는 \ _ \ _ invoke 메소드를 실행합니다. 3. 로깅 및 계산기, 코드 유연성 및 가독성 향상과 같은 시나리오에 적합합니다.

섬유는 PHP8.1에 도입되어 동시 처리 기능을 향상시켰다. 1) 섬유는 코 루틴과 유사한 가벼운 동시성 모델입니다. 2) 개발자는 작업의 실행 흐름을 수동으로 제어 할 수 있으며 I/O 집약적 작업을 처리하는 데 적합합니다. 3) 섬유를 사용하면보다 효율적이고 반응이 좋은 코드를 작성할 수 있습니다.

PHP 커뮤니티는 개발자 성장을 돕기 위해 풍부한 자원과 지원을 제공합니다. 1) 자료에는 공식 문서, 튜토리얼, 블로그 및 Laravel 및 Symfony와 같은 오픈 소스 프로젝트가 포함됩니다. 2) 지원은 StackoverFlow, Reddit 및 Slack 채널을 통해 얻을 수 있습니다. 3) RFC에 따라 개발 동향을 배울 수 있습니다. 4) 적극적인 참여, 코드에 대한 기여 및 학습 공유를 통해 커뮤니티에 통합 될 수 있습니다.

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

PHP는 죽지 않고 끊임없이 적응하고 진화합니다. 1) PHP는 1994 년부터 새로운 기술 트렌드에 적응하기 위해 여러 버전 반복을 겪었습니다. 2) 현재 전자 상거래, 컨텐츠 관리 시스템 및 기타 분야에서 널리 사용됩니다. 3) PHP8은 성능과 현대화를 개선하기 위해 JIT 컴파일러 및 기타 기능을 소개합니다. 4) Opcache를 사용하고 PSR-12 표준을 따라 성능 및 코드 품질을 최적화하십시오.

PHP의 미래는 새로운 기술 트렌드에 적응하고 혁신적인 기능을 도입함으로써 달성 될 것입니다. 1) 클라우드 컴퓨팅, 컨테이너화 및 마이크로 서비스 아키텍처에 적응, Docker 및 Kubernetes 지원; 2) 성능 및 데이터 처리 효율을 향상시키기 위해 JIT 컴파일러 및 열거 유형을 도입합니다. 3) 지속적으로 성능을 최적화하고 모범 사례를 홍보합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

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