什么Exception子类内置到PHP中?

Chr*_*ris 50 php exception-handling exception class

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

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

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

Joh*_*nde 103

PHP 5有两个内置的异常

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

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

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

PHP 7.3引入了JSON异常:

  • TypeError被抛出时,ArithmeticErrorDivisionByZeroError遇到一个错误.

这是一个演示PHP 7中引入的新层次结构的图表:

\Throwable
??? \Exception (implements \Throwable)
|   |?? \DOMException (extends \Exception)
|   ??? \IntlException (extends \Exception)
|   ??? \JsonException (extends \Exception)
|   |?? \PharException (extends \Exception)
|   |?? \ReflectionException (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)
Run Code Online (Sandbox Code Playgroud)

  • 加倍努力并将它们全部联系起来.优秀. (7认同)
  • @ ex3v认为这是对SO用户或PHP开发者的评论? (3认同)

Chr*_*ris 19

实际上,我找到了他们,因为我崩溃了并且问道.

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

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

解释他们的heirarchy:http://www.php.net/~helly/php/ext/spl/classException.html

更新

上面的链接已经死了,它是基本PHP异常层次结构的图表.我找不到原版,但这里有一个替代品:

PHP异常层次结构

最初发现于http://fossies.org/dox/php-5.2.17/classException.html