前言
??在介绍这个函数之前我们先看一段代码
throw new Exception('test a exception');
??运行代码,可以看到一段报错信息。 ??这是因为在PHP中,如果我们抛出了一个异常,但是没有去去捕获它,就会导致一个致命错误,错误类型为Uncaught Exception,未捕获异常。
??代码里当然不能出现致命错误,我们现在要解决这个问题有两个方法,一个是捕获异常,一个是使用自定义异常处理函数。
捕获异常
try{
throw new Exception('test a exception');
}catch (Throwable $throwable){
echo $throwable->getMessage();
}
自定义异常处理
set_exception_handler('test_exception');
throw new Exception('test a exception');
function test_exception(Throwable $throwable)
{
echo $throwable->getMessage();
}
自定义异常处理
??该函数不仅可以绑定普通的函数,还可以绑定类里的方法。
set_exception_handler(['ExceptionHandler','exceptionHandle']);
class ExceptionHandler
{
public static function exceptionHandle(Throwable $throwable)
{
echo 'exceptionHandle '.$throwable->getMessage();
}
}
throw new Exception('test a exception');
??看到这上面这段代码,不知道大家是否熟悉,其实在很多框架里面都有自定义异常的功能,下面再完善下代码,相信大家就更加熟悉了。
set_exception_handler(['MyExceptionHandler','myExceptionHandle']);
class MyExceptionHandler
{
public static function myExceptionHandle(Throwable $throwable)
{
if($throwable instanceof MyException){
echo 'myExceptionHandle '.$throwable->getMessage();
}
}
}
class MyException extends Exception
{
}
throw new MyException('test a my exception');
??相信大家在开发的时候会有自己的异常处理,如果使用大量的if判断加return,代码比较繁琐,或者抛出普通的异常在最后的时候捕捉异常,这样也没有直接抛出异常处理异常来的方便。 ??上面只是举了一个很简单自定义异常处理,大家可以结合自己的业务,举一反三定义贴合自己的异常处理。
注意事项
- 异常处理程序要在抛异常前面,否则依然会报错。
- 异常处理程序只能绑定一个回调,绑定多个回调只会用最后一个。
- 这个异常处理程序被调用后,脚本会停止执行。
更多例子可以参考官方文档:
set_exception_handler
|