实际开发中,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