Подтвердить что ты не робот

Какие подклассы Exception встроены в PHP?

Мне еще не удалось найти список всех встроенных подкласс классов Exception в PHP. Я бы предпочел использовать встроенные в них, когда они имеют смысл, прежде чем создавать свои собственные подклассы исключений.

Например, я знаю, что InvalidArgumentException существует, но похоже, что ничего не похоже на Java NullPointerException.

Кто-нибудь имеет ссылку или может ссылаться на список доступных подклассов Exception в PHP?

4b9b3361

Ответ 1

PHP 5 имеет два встроенных исключения

SPL включает несколько собственных встроенных исключений:

  • BadFunctionCallException Обратный вызов ссылается на неопределенную функцию или если отсутствуют некоторые аргументы.
  • BadMethodCallException Обратный вызов ссылается на неопределенный метод или если некоторые аргументы отсутствуют.
  • DOMException
  • DomainException Значение не соответствует определенной допустимой области данных.
  • IntlException его класс используется для генерации исключений, когда ошибки происходят внутри intl-функций. Такие исключения генерируются только тогда, когда включено intl.use_exceptions.
  • InvalidArgumentException аргументы были недействительными.
  • LengthException Параметр превышает допустимую длину (используется для строк, массивов, размера файла и т.д.).
  • LogicException общая ошибка в логике программы.
  • OutOfBoundsException недопустимый индекс.
  • OutOfRangeException недопустимый индекс. Это представляет ошибки, которые должны быть обнаружены во время компиляции.
  • OverflowException Добавление элемента в полный контейнер.
  • PharException Брошенный, работая с классом Phar
  • RangeException Указывает ошибки диапазона во время выполнения программы. Обычно это означает, что произошла арифметическая ошибка, отличная от under/overflow.
  • ReflectionException Выдается при работе с классами Reflection
  • RuntimeException Ошибка, которая может быть найдена только во время выполнения.
  • UnderflowException Выполнение недопустимой операции с пустым контейнером, например удаление элемента.
  • UnexpectedValueException Получено непредвиденное значение (т.е. Как результат возвращенного значения из вызова метода).

В PHP 7 вводятся новые исключения, в том числе обнаруживаемые ошибки. Новые исключения включают в себя:

  • Throwable - это базовый интерфейс для любого объекта, который может быть сгенерирован с помощью оператора throw в PHP 7, включая 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 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)

Ответ 2

Собственно, мне удалось найти их сейчас, когда я сломался и спросил.

Технически это выглядит так: 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

Обновление

Ссылка выше мертва, это была диаграмма базовой иерархии исключений PHP. Я не мог найти оригинал, но вот замена:

PHP Exception Hierarchy

Первоначально найден на http://fossies.org/dox/php-5.2.17/classException.html