实际开发中,Exception和Throwable都是常用的异常处理类
继承关系:
Throwable是一个接口,所有异常类(包括Exception和Error)都必须实现这个接口。Exception是Throwable的一个子类,它提供了基本的异常功能。
类型兼容性:
Throwable接口包括两个方法:getMessage()和getCode(),所有异常类都必须实现这两个方法。Exception类除了实现Throwable接口外,还提供了一些额外的功能,比如getFile()、getLine()和getTrace()等,这些方法提供了异常的更多上下文信息。所以本人比较喜欢用
Exception,丝滑小连招try { // do sth... } catch (\Exception $e) { Log::error('XXX失败 @XXX file => ' . $e->getFile() . ' line => ' . $e->getLine() . ' error => ' . $e->getMessage()); }
错误类型:
Exception主要用于处理程序中的异常,这些异常错误通常是在程序执行过程中可以预料到的。Error类是Throwable的另一个子类,它用于处理PHP运行时错误,这些错误通常是由于PHP自身的错误,而不是程序逻辑错误引起的。
这里需要理解一下[程序异常]、[运行错误]function divide($dividend, $divisor) { if ($divisor == 0) { throw new \Exception("除数不能为0"); } return $dividend / $divisor; } try { echo divide(10, 0); // 显式抛出异常 } catch (\Exception $e) { echo "捕获到异常: " . $e->getMessage(); }// 尝试访问一个未定义的变量 try { echo $aaa; // 未定义变量aaa } catch (Error $e) { echo "捕获到错误: " . $e->getMessage(); }
异常捕捉:
- 在PHP 7及以后的版本中,你可以捕获
Throwable来捕获所有异常和错误,包括Exception和Error。 在PHP 5中,你只能捕获
Exception类型的对象,而Error类型的错误不会被try-catch捕获,除非使用set_exception_handler()设置一个全局异常处理器。php5某些框架写法不严谨,经常出现数据库select不存在的字段、变量为null之类的报错经常性不会程序终止,而是继续运行。。。
- 在PHP 7及以后的版本中,你可以捕获
使用场景:
- 通常,你应该捕获
Exception来处理程序中的逻辑错误。 - 对于
Error类型的错误,你应该使用set_error_handler()来设置一个错误处理器,或者使用try-catch块来捕获Throwable。
- 通常,你应该捕获
本文由 ben 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Dec 9, 2024 at 09:49 am