> 백엔드 개발 > PHP7 > PHP에서 전역 예외/오류가 발생하면 어떻게 해야 할까요?

PHP에서 전역 예외/오류가 발생하면 어떻게 해야 할까요?

醉折花枝作酒筹
풀어 주다: 2023-02-18 07:34:01
앞으로
2333명이 탐색했습니다.

개발 중에는 다양한 시나리오에서 보다 친숙한 처리 팁을 제공하기 위해 오류 및 예외 처리 기능을 사용자 정의해야 하는 경우가 많습니다. 오늘은 set_Exception_handler/set_error_handler를 사용하여 예외/오류를 해결하는 방법을 소개하겠습니다. 필요하다면 참고하시면 됩니다.

PHP에서 전역 예외/오류가 발생하면 어떻게 해야 할까요?

Exception

캐치 캡처 처리를 시도하지 않고 예외가 발생하면 시스템은 치명적인 오류를 생성하고 실행을 종료하기 전에 관련 정보를 덤프합니다.

throw new Exception("Error Processing Request", 1);

Fatal error: Uncaught exception 'Exception' with message 'Error Processing Request'
로그인 후 복사

set_Exception_handler는 전역 예외 처리 함수를 설정할 수 있습니다. 예외가 try catch로 처리되지 않으면 시스템은 처리를 위해 예외를 이 함수에 넘겨줍니다. catch를 시도하면 처리가 완료됩니다. 그 후에도 프로그램은 여전히 ​​실행을 종료하고 후속 코드는 실행되지 않습니다.

오류

PHP에서 자주 발생하는 오류는 다음과 같습니다: ERROR/WARNING/NOTICE

trigger_error 함수를 사용하여 오류를 트리거하고 set_error_handler를 사용하여 자체 오류 처리 기능을 정의할 수 있습니다.

trigger_error는 기본적으로 실행 프로세스에 영향을 주지 않는 사용자 수준의 오류를 발생시킵니다.

참고: set_error_handler는 사용자 수준의 오류를 차단합니다. 자체 처리 코드에서 오류 수준 판단을 수동으로 구현하지 않는 한 스크립트 실행 종료를 허용하지 않습니다. 차단이 수행되지 않으면 사용자 수준 오류도 시스템의 오류 처리 메커니즘으로 전달됩니다. 시스템의 오류 처리 메커니즘은 오류와 함께 종료되고 경고 알림 후 실행을 계속하는 것입니다.

<?php
/**
 * 全局异常处理函数,会捕捉没有被 try catch 处理的异常
 * @param  [type] $exception [description]
 * @return [type]            [description]
 */
function func_exception_handler($exception)
{
    echo "User Exception:" .
        " [" . $exception->getCode() . "]" .
        " message " . $exception->getMessage() .
        " in file " . $exception->getFile() .
        " on line " . $exception->getLine() . PHP_EOL;
}

//如果不设定全局的异常处理函数 且 抛出异常时不使用 try catch 处理则会 fatal error
set_exception_handler("func_exception_handler");

try {
    throw new Exception("我会被 try catch 捕捉处理,不影响执行流程!");
} catch (Exception $e) {
    echo $e->getMessage() . PHP_EOL;
}

throw new Exception("我没有被 try catch 捕捉处理,会被全局 set_exception_handler 处理!");

echo "没有被 try catch 处理的异常在我之前抛出,虽然被 set_exception_handler 但仍然会立刻退出执行,执行不到我哟" . PHP_EOL;
로그인 후 복사

사용자 정의 오류 처리 후에는 오류가 더 이상 처리를 위해 시스템으로 전달되지 않습니다.

trigger_error("notice, go on!", E_USER_NOTICE);

echo "executing!" . PHP_EOL;

trigger_error("warning, go on!", E_USER_WARNING);

echo "executing!" . PHP_EOL;

trigger_error("error, exit!", E_USER_ERROR);

echo "not execute!";
로그인 후 복사

팁:

예외가 발생했지만 try catch로 처리되지 않으면 시스템에서 치명적인 오류가 발생하고 오류가 발생합니다. 실행을 종료하는 스크립트는 try catch로 처리된 예외를 포착하지 않으며 일부 친숙한 정보 출력을 사용자 정의하면 치명적인 오류 발생을 방지할 수 없으며 스크립트는 여전히 실행을 종료합니다.

set_error_handler는 처리를 위해 사용자가 트리거한 오류를 시스템에 제출하는 대신 가로채지만 오류 수준을 자동으로 식별하여 종료할 ERROR 수준인지, WARNING 또는 NOTICE인지 수동으로 결정해야 합니다. 수준. 프롬프트 후에 실행을 계속합니다.

추천 학습:

php 비디오 튜토리얼

위 내용은 PHP에서 전역 예외/오류가 발생하면 어떻게 해야 할까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿