Laravel5.5解析-bootstrap列表-HandleExceptions

本文深入探讨PHP中的错误与异常概念,包括不同级别的错误类型如FatalError、ParseError及WarningError,并讲解如何通过set_error_handler、register_shutdown_function和set_exception_handler函数自动捕获这些错误与异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

扩展:PHP错误与异常

错误与异常的概念
异常:在程序运行过程中不符合正常业务逻辑的错误,属于业务逻辑的错误。
错误:脚本本身的错误,多位语法错误、服务器环境错误。

错误的级别

Fatal Error:致命错误(脚本终止运行)
        E_ERROR         // 致命的运行错误,错误无法恢复,暂停执行脚本
        E_CORE_ERROR    // PHP启动时初始化过程中的致命错误
        E_COMPILE_ERROR // 编译时致命性错,就像由Zend脚本引擎生成了一个E_ERROR
        E_USER_ERROR    // 自定义错误消息。像用PHP函数trigger_error(错误类型设置为:E_USER_ERROR)

    Parse Error:编译时解析错误,语法错误(脚本终止运行)
        E_PARSE  //编译时的语法解析错误

    Warning Error:警告错误(仅给出提示信息,脚本不终止运行)
        E_WARNING         // 运行时警告 (非致命错误)。
        E_CORE_WARNING    // PHP初始化启动过程中发生的警告 (非致命错误) 。
        E_COMPILE_WARNING // 编译警告
        E_USER_WARNING    // 用户产生的警告信息

    Notice Error:通知错误(仅给出通知信息,脚本不终止运行)
        E_NOTICE      // 运行时通知。表示脚本遇到可能会表现为错误的情况.
        E_USER_NOTICE // 用户产生的通知信息。

相关配置

display_errors : true | false
设置错误信息显示
error_reporting : integer
设置错误显示类型

自动捕获函数

自动捕获warning与notice等错误

set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] ) : mixed

注册错误处理函数,注册错误处理函数后,$error_types指定的错误类型将绕过PHP标准错误处理程序,即display_errors与error_reporting配置项无效,除非回调函数返回false;
E_ERROR、 E_PARSE等错误不能由回调函数处理

set_error_handler('error_handler');
function error_handler($type, $message, $file, $line){
	...
}

自动捕获pares error 与fatal error等错误

register_shutdown_function ( callable $callback [, mixed $parameter [, mixed $... ]] ) : void

捕获PHP的Fatal Error、Parse Error等错误,PHP脚本执行结束前最后一个调用注册的回调函数,比如脚本错误、die()、exit、正常结束都会调用,配合error_get_last()函数获取错误信息

error_reporting(0);//设置-1,则优先显示debug信息,然后交由回调函数处理,生产环境关闭error_reporting
register_shutdown_function('shutdown_handler');
function shutdown_handler(){
    if ($error = error_get_last()) {
		...
    }
}
//引入文件,处理文件中的脚本错误
require_once 'parse_error.php';

特别说明,对与语法解析错误,应该确保注册回调函数的当前脚本文件误语法错误,因为语法解析器优先执行,如果当前文件发生语法错误,则不会执行到register_shutdown_function(),在注册回调函数后,通过require引入到文件语法解析过程中发生错误则可以交由回调函数处理。

自动捕获异常

set_exception_handler ( callable $exception_handler ) : callable

捕获未被try/catch处理的异常

set_exception_handler('exception_handler');
function exception_handler($exception){
    echo $exception->getMessage()."\n";
}
throw new Exception('Exception occur');

如果未注册异常捕获函数,则异常未捕获会触发Fatal Error错误

HandleExceptions

bootstrap()

	//class HandleExceptions
    public function bootstrap(Application $app)
    {
        $this->app = $app;
		//设置错误显示类型
        error_reporting(-1);
		//设置warning,notice自动捕获函数
        set_error_handler([$this, 'handleError']);
		//设置异常自动捕获函数
        set_exception_handler([$this, 'handleException']);
		//设置fatal error,prase error自动捕获函数
        register_shutdown_function([$this, 'handleShutdown']);
    }

设置自动捕获错误与异常函数,具体的函数使用的类库及相应机制这里就不探究了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值