54

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

例如,我知道 InvalidArgumentException 存在,但似乎没有任何东西可以与 Java 的 NullPointerException 相比。

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

4

2 回答 2

112

PHP 5 有两个内置异常

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

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

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

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

  • Throwable是可以通过 PHP 7 中的 throw 语句抛出的任何对象的基本接口,包括 Error 和 Exception。
  • Error是所有内部 PHP 错误的基类。
  • AssertionError当通过 assert() 做出的断言失败时抛出。
  • ParseError在解析 PHP 代码时发生错误时抛出,例如调用 eval() 时。
  • TypeError在三种情况下可能会抛出 TypeError。第一个是传递给函数的参数类型与其相应的声明参数类型不匹配。第二个是从函数返回的值与声明的函数返回类型不匹配。第三个是将无效数量的参数传递给内置 PHP 函数(仅限严格模式)。
  • ArithmeticError在执行数学运算时发生错误时抛出。在 PHP 7.0 中,这些错误包括尝试执行负数移位,以及任何调用 intdiv() 会导致值超出整数可能范围的情况。
  • DivisionByZeroError当试图将一个数字除以零时抛出。
  • 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)
于 2012-05-31T17:22:02.683 回答
21

实际上,我现在终于找到了他们,我崩溃了,问了。

从技术上讲,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 异常层次结构

最初在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 月 2 日)

于 2012-05-31T17:23:29.617 回答