PHP 标准异常处理类
PHP 标准异常处理类含 预定义异常
以及 SPL标准异常
两种。
Throwable 接口
介绍异常处理类之前还需要先了解 Throwable
接口;
Throwable
是能被 throw
语句抛出的最基本的接口(interface),包含了 Error
和 Exception
;
用户自定义类不能直接实现 Throwable
接口,应当去继承 Exception
;
Error
作为内部错误类基类,由 PHP 自身抛出,用户不应该抛出 Error
异常。
预定义异常
PHP 预定义异常类含 2 类:
- 用户级异常类(
Exception
系列) - PHP 内部错误类(
Error
系列)
Exception 及其继承类
- Exception
- 所有用户级异常的基类
- ErrorException
- 错误异常
- ClosedGeneratorException
- 当尝试从已关闭的 Generator 中检索值时,会引发 ClosedGeneratorException
Error 及其继承类
- Error
- 所有 PHP 内部错误类的基类
- ArgumentCountError
- 当传递给用户定义的函数或方法的参数太少时被抛出
- 当传递到非可变内置函数的参数太多时,也会抛出此错误
- ArithmeticError
- 当执行数学运算发生错误时抛出
- AssertionError
- 在函数
assert()
断言失败时被抛出
- 在函数
- DivisionByZeroError
- 当除数为零时被抛出
- CompileError
- 针对一些编译错误抛出的,PHP 低版本会发出致命错误
- ParseError
- 当解析 PHP 代码时发生错误时抛出,比如当
eval()
被调用出错时
- 当解析 PHP 代码时发生错误时抛出,比如当
- TypeError : 会抛出 TypeError 的情况如下
- 为类属性设置的值与该属性申明的类型不匹配
- 传递给函数的参数类型与函数预期声明的参数类型不匹配
- 函数返回的值与声明的函数返回类型不匹配
- ValueError
- 当参数类型正确但是值不正确的时候会抛出 ValueError。
- 例如,当函数期望是正整数时传递负整数,或者当函数期望它不为空时传递空字符串/数组
- UnhandledMatchError
- 当传递给
match
表达式的主体未被 match 表达式的任何分支处理时,将会抛出 UnhandledMatchError
- 当传递给
- FiberError
- 当在
Fiber
上执行无效操作时,会抛出 FiberError
- 当在
- RequestParseBodyException
- 根据
Content-Type
头,当请求体无效时,在request_parse_body()
中抛出RequestParseBodyException
- 根据
SPL 异常类
SPL 异常类统一继承 Exception
异常类,在此基础上又可分为 2 类:
- 程序逻辑错误(
LogicException
系列) - 仅在运行时发现的错误(
RuntimeException
系列)
LogicException 及其继承类
- LogicException
- 程序逻辑错误时抛出
- BadFunctionCallException
- 如果回调引用未定义的函数或缺少某些参数,则引发异常
- BadMethodCallException
- 当
callback
指向未定义的方法或缺失一些参数时会抛出该异常。
- 当
- DomainException
- 如果值不符合定义的有效数据域,则引发异常
- InvalidArgumentException
- 如果参数不是预期的类型,则引发异常
- LengthException
- 如果长度无效则引发异常
RuntimeException 及其继承类
- RuntimeException
- 如果发生只能在运行时找到的错误,则引发异常
- OutOfBoundsException
- 如果值不是有效键则引发异常。这表示编译时无法检测到的错误。
- OutOfRangeException
- 请求非法索引时引发异常。这表示应该在编译时检测到的错误。
- OverflowException
- 将元素添加到已满容器时引发异常。
- RangeException
- 引发异常以指示程序执行期间的范围错误。
- 通常,这意味着存在除欠/上溢之外的算术错误。
- 这是 DomainException 的运行时版本。
- UnderflowException
- 在空容器上执行无效操作(如移除元素)时引发异常。
- UnexpectedValueException
- 如果值与一组值不匹配则引发异常。
- 通常情况下,当一个函数调用另一个函数并期望返回某个类型或值时,会发生这种情况,其中不包括与算术或缓冲区相关的错误。