PHP 中内置了哪些异常子类?

2022-08-30 10:03:51

我还没有找到PHP中所有内置异常子类的列表。我宁愿在有意义的时候使用内置的,然后再创建我自己的异常子类。

例如,我知道ValidArgumentException存在,但似乎没有什么可以与Java的NullPointerException相媲美。

是否有人拥有或可以链接到 PHP 中可用的 Exception 子类列表?


答案 1

PHP 5 有两个内置异常

PHP中的库有自己的内置异常

  • DOMExceptionDOM 操作在特定情况下会引发异常,即,当由于逻辑原因无法执行某个操作时。
  • IntlException 他的类用于在 intl 函数内发生错误时生成异常。仅当启用intl.use_exceptions时,才会生成此类异常。
  • 法尔例外在使用 Phar 类时抛出
  • 反射异常使用反射类时抛出

SPL 包括一些自己的内置异常

PHP 7 引入了新的异常,包括可捕获的错误。新的例外情况包括:

  • Throwable 是 PHP 7 中可以通过 throw 语句(包括 Error 和 Exception)引发的任何对象的基本接口。
  • 错误是所有内部 PHP 错误的基类。
  • 当通过 assert() 进行的断言失败时,将引发 AssertionError
  • 当解析 PHP 代码时发生错误时(例如调用 eval() 时),将引发 ParseError
  • 类型错误在三种情况下,可能会引发 TypeError。第一种情况是传递给函数的参数类型与其相应的声明参数类型不匹配。第二种情况是从函数返回的值与声明的函数返回类型不匹配的情况。第三种是将无效数量的参数传递给内置 PHP 函数(仅限严格模式)。
  • 当在执行数学运算时发生错误时,将引发算术错误。在 PHP 7.0 中,这些错误包括尝试以负量执行位移,以及任何对 intdiv() 的调用都会导致值超出整数的可能范围。
  • 尝试将数字除以零时,将引发除以除以零的错误。
  • 当传递给用户定义函数或方法的参数太少时,将引发 ArgumentCountError

PHP 7.3 引入了 JSON 异常:

  • JsonException 在遇到错误时被抛出。json_encode()json_decode()

PHP 8 引入了一个新的例外:

  • 将值传递给具有有效类型但不能用于操作的函数时,将引发 ValueError

下面是一个图表,演示了 PHP 7 中引入的新层次结构:

\Throwable
├── \Exception (implements \Throwable)
|   |── \DOMException (extends \Exception)
|   ├── \IntlException (extends \Exception)
|   ├── \JsonException (extends \Exception)
|   |── \PharException (extends \Exception)
|   |── \ReflectionException (extends \Exception)
|   |── \ValueError (extends \Exception)
│   ├── \LogicException (extends \Exception)
│   │   ├── \BadFunctionCallException (extends \LogicException)
│   │   │   └── \BadMethodCallException (extends \BadFunctionCallException)
│   │   ├── \DomainException (extends \LogicException)
│   │   ├── \InvalidArgumentException (extends \LogicException)
│   │   ├── \LengthException (extends \LogicException)
│   │   └── \OutOfRangeException (extends \LogicException)
│   └── \RuntimeException (extends \Exception)
│       ├── \OutOfBoundsException (extends \RuntimeException)
│       ├── \OverflowException (extends \RuntimeException)
│       ├── \RangeException (extends \RuntimeException)
│       ├── \UnderflowException (extends \RuntimeException)
│       └── \UnexpectedValueException (extends \RuntimeException)
└── \Error (implements \Throwable)
    ├── \AssertionError (extends \Error)
    ├── \ParseError (extends \Error)
    └── \TypeError (extends \Error)
        └── \ArgumentCountError (extends \TypeError)
    └── \ArithmeticError (extends \Error)
        └── \DivisionByZeroError extends \ArithmeticError)

答案 2

实际上,我现在设法找到了他们,因为我崩溃了并询问了。

从技术上讲,PHP看起来只有2个内置的例外:http://www.php.net/manual/en/reserved.exceptions.php

SPL定义了更多:http://www.php.net/manual/en/spl.exceptions.php

解释他们的继承权:http://www.php.net/~helly/php/ext/spl/classException.html http://web.archive.org/web/20130829124146/http://www.php.net/~helly/php/ext/spl/classException.html(存档于2013年8月29日)

更新

上面的链接是死的,它是基本PHP异常层次结构的图表。我找不到原始文件,但这里有一个替代品:

PHP Exception Hierarchy

最初发现于 http://fossies.org/dox/php-5.2.17/classException.html,现存档于 http://web.archive.org/web/20151002165210/https://fossies.org/dox/php-5.2.17/classException.html (存档于2015年10月02日)


推荐