php捕捉Warning、Notice错误

tech2025-06-21  12

介绍

php中try catch 无法捕捉到Warning、Notice错误

解决方法

1.注册错误处理函数来全局捕捉,

缺点,不能try catch马上捕捉到,进行处理

set_error_handler([__CLASS__, 'error']); set_exception_handler([__CLASS__, 'exception']); register_shutdown_function([__CLASS__, 'shutdown']);

set_error_handler

一般用于捕捉: E_NOTICE 、E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE 不能捕捉: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR and E_COMPILE_WARNING。 一般与trigger_error("...", E_USER_ERROR),配合使用。

set_exception_handler

设置默认的异常处理程序,用于没有用 try/catch 块来捕获的异常。 在 exception_handler 调用后异常会中止。 与throw new Exception('Uncaught Exception occurred'),连用。

register_shutdown_function

执行机制是:php把要调用的函数调入内存。当页面所有PHP语句都执行完成时,再调用此函数。 一般与trigger_error("...", E_USER_ERROR),配合使用。

restore_error_handler()函数

定义和用法 restore_error_handler() 函数恢复之前的错误处理程序,该程序是由 set_error_handler() 函数改变的。 该函数永远返回 true。 是 set_error_handler()的反函数。

2.用error_get_last 获取最后一个错误

抛出一个自定义错误trigger_error('flag', E_USER_NOTICE)

执行可能抛出notice的语句判断最后一个错误是不是之前抛出的,不是的话说明上一条语句抛出了新的错误抛出个能让catch捕捉到的异常 error_get_last() 函数获得最后发生的错误。 该函数以数组的形式返回最后发生的错误。如果没有错误发生则返回 NULL。 返回的错误数组包含 4 个键名和键值: [type] - 错误类型 [message] - 错误消息 [file] - 发生错误所在的文件 [line] - 发生错误所在的行 语法 error_get_last() 实例 <?php echo $test; print_r(error_get_last()); ?> 上面代码的输出如下所示: Array ( [type] => 8 [message] => Undefined variable: test [file] => C:webfoldertest.php [line] => 2 )

示例

try { @trigger_error('flag', E_USER_NOTICE); self::$_instance->ping(); $error = error_get_last(); if($error['message'] != 'flag') throw new \Exception('Redis server went away'); } catch (\Exception $e) { // 断线重连 new self(); }

有帮助请三连

最新回复(0)