什么Exception子类内置到PHP中?

时间:2012-05-31 17:19:58

标签: php class exception exception-handling

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

例如,我知道存在InvalidArgumentException,但似乎没有与Java的NullPointerException相当的。

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

2 个答案:

答案 0 :(得分:96)

PHP 5有两个内置的异常

SPL includes a few of its own built in exceptions

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

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

PHP 7.3引入了JSON异常:

    {li} JsonExceptionjson_encode()json_decode()遇到错误时抛出。

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

\Throwable
├── \Exception (implements \Throwable)
|   ├── \JsonException (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)

答案 1 :(得分:18)

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

从技术上讲,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 Exception Hierarchy

最初在http://fossies.org/dox/php-5.2.17/classException.html

找到