PHP 中 使用set_exception_handler() 自定义回调函数 处理出现的异常

操作环境:php7.4.33

使用 set_exception_handler() 来定义,默认的异常处理程序,通常用在 没有 try/catch 块 捕获的异常。

自动捕获

    首先,定义一个处理异常的函数。

function myExceptionHandler($exception)
{

    echo $exception->getMessage();
    
}

然后调用函数 set_exception_handler(),他的值是定义的函数名。

set_exception_handler('myExceptionHandler');

然后,当代码中发生了一些类型的错误,将被它自动捕获

假如,我们调用一个 没有定义 的函数 abc():

abc();

在没有使用 自定义 异常处理函数前,将得到一长段 异常信息:

Fatal error: Uncaught Error: Call to undefined function abc() in D:\xapp\www\htdocs\00.mysql.php:15 Stack trace: #0 {main} thrown in D:\xapp\www\htdocs\00.mysql.php on line 15

在使用了 自定义 异常处理函数 后,我们将得到一段简单的 异常信息:

Call to undefined function abc()

简单明了!

需要说明:set_exception_handler() 此种方法能处理的类型为 致命级别(Fatal error 的错误。

    其他类型如:E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、 E_COMPILE_ERROR、

 E_COMPILE_WARNING,和在 调用 set_error_handler() 函数所在文件中产生的大多数 E_STRICT

    不能处理,他们将独立于用户自定义错误处理函数之外,独立显示出来。
 

手动抛出

    除了能够自动捕获系统级别的异常,还可以捕获手动抛出的异常信息:

    使用 throw 关键字 new Exception :

throw new Exception('error message ');

    最后,捕获的就是 括号里的字符串 error message

    在没有 try/catch 块的情况下,throw 抛出的异常信息,将被 自定义的 异常处理所捕获,有try/catch 快的情况下,将优先通过 try/catch 爆出!

try {
    
    throw new Exception('Test String!');

} catch (Exception $e) {

    print_r('Error Messages: '.$e->getMessage());
}

最后输出:

Error Messages:Test String

PHP 7 错误处理

    不同于传统PHP5的错误报告机制,PHP7中,大多数错误被当做 Error 异常抛出。

    Error 可以像 Exception 一样被 try/catch 块 捕获。

    需要注意的是 Error 不是 继承自 Exception ,所以不能用 catch (Exception $e) { ... } 来捕获 Error,而是用 catch (Error $e) { ... },或者通过注册异常处理函数( set_exception_handler())来捕获 Error。

    因为 Exception 和 Error 都是继承自 Throwable 接口 ,所以也可以像下面一样使用:

try {
    Throw new Error('Test String!');
} catch (Throwable $th) {
    echo 'Error Message: '. $th->getMessage();
}

catch块的括号里写 catch (Throwable $e) ,也是能发挥作用的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值