PHP 中内置了哪些异常子类?
我还没有找到PHP中所有内置异常子类的列表。我宁愿在有意义的时候使用内置的,然后再创建我自己的异常子类。
例如,我知道ValidArgumentException存在,但似乎没有什么可以与Java的NullPointerException相媲美。
是否有人拥有或可以链接到 PHP 中可用的 Exception 子类列表?
我还没有找到PHP中所有内置异常子类的列表。我宁愿在有意义的时候使用内置的,然后再创建我自己的异常子类。
例如,我知道ValidArgumentException存在,但似乎没有什么可以与Java的NullPointerException相媲美。
是否有人拥有或可以链接到 PHP 中可用的 Exception 子类列表?
PHP 5 有两个内置异常
PHP中的库有自己的内置异常
DOMException
DOM 操作在特定情况下会引发异常,即,当由于逻辑原因无法执行某个操作时。IntlException
他的类用于在 intl 函数内发生错误时生成异常。仅当启用intl.use_exceptions时,才会生成此类异常。法尔例外
在使用 Phar 类时抛出反射异常
使用反射类时抛出BadFunctionCallException
回调是指未定义的函数或缺少某些参数。BadMethodCallException
回调是指未定义的方法或缺少某些参数。域名异常
值不遵循定义的有效数据域。InvalidArgumentException
通过的参数无效。长度异常
该参数超过允许的长度(用于字符串、数组、文件大小等)。逻辑异常
程序逻辑中发生一般错误。出站异常
请求了非法索引。超出范围异常
请求了非法索引。这表示应在编译时检测到的错误。溢出异常
将元素添加到完整容器。范围异常
指示程序执行期间的范围错误。通常,这意味着存在除下溢/溢出以外的算术错误。运行时异常
发生只能在运行时找到的错误。下溢异常
对空容器执行无效操作,如删除元素。意外值异常
收到意外值(即,作为从方法调用返回值的结果)。PHP 7 引入了新的异常,包括可捕获的错误。新的例外情况包括:
Throwable
是 PHP 7 中可以通过 throw 语句(包括 Error 和 Exception)引发的任何对象的基本接口。错误
是所有内部 PHP 错误的基类。AssertionError
。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)
实际上,我现在设法找到了他们,因为我崩溃了并询问了。
从技术上讲,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月02日)