我还没有找到 PHP 中所有内置 Exception 子类的列表。在创建自己的异常子类之前,我宁愿在有意义的时候使用内置的。
例如,我知道 InvalidArgumentException 存在,但似乎没有任何东西可以与 Java 的 NullPointerException 相比。
是否有人拥有或可以链接到 PHP 中可用的异常子类列表?
我还没有找到 PHP 中所有内置 Exception 子类的列表。在创建自己的异常子类之前,我宁愿在有意义的时候使用内置的。
例如,我知道 InvalidArgumentException 存在,但似乎没有任何东西可以与 Java 的 NullPointerException 相比。
是否有人拥有或可以链接到 PHP 中可用的异常子类列表?
PHP 5 有两个内置异常
PHP 中的库有自己的内置异常
DOMException
DOM 操作在特定情况下会引发异常,例如,当某个操作由于逻辑原因而无法执行时。IntlException
他的类用于在 intl 函数内部发生错误时生成异常。仅当启用 intl.use_exceptions 时才会生成此类异常。PharException
使用 Phar 类时抛出ReflectionException
使用反射类时抛出BadFunctionCallException
回调是指未定义的函数或缺少某些参数。BadMethodCallException
回调是指未定义的方法或缺少某些参数。DomainException
值不符合定义的有效数据域。InvalidArgumentException
传递的参数无效。LengthException
参数超过允许的长度(用于字符串、数组、文件大小等)。LogicException
程序逻辑中发生一般错误。OutOfBoundsException
请求了非法索引。OutOfRangeException
请求了非法索引。这表示应在编译时检测到的错误。OverflowException
将元素添加到完整容器中。RangeException
指示程序执行期间的范围错误。通常这意味着存在除下溢/溢出之外的算术错误。RuntimeException
发生只能在运行时发现的错误。UnderflowException
对空容器执行无效操作,例如删除元素。UnexpectedValueException
接收到意外值(即作为方法调用返回值的结果)。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)
实际上,我现在终于找到了他们,我崩溃了,问了。
从技术上讲,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 异常层次结构图。我找不到原件,但这里有一个替代品:
最初在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 日)