Вопрос по php, class, exception-handling, exception – Какие подклассы исключений встроены в PHP?

42

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

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

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

@webbiedave В частности, я пишу код, который будут вызывать другие. Я не могу знать, что они будут правильно использовать мой код, и я не буду отвечать за исправление проблемы, просто чтобы сообщить им, что они допустили ошибку. Но вопрос, как правило, предназначен для получения информации о доступных исключениях. Chris
Понимаю. Я думал, что вы пытаетесь справиться с ними. Вы пытаетесь выяснить, что вы можете бросить. webbiedave
На самом деле, если иметь дело с объектами, PHP может выдатьPHP Fatal error: Call to a member function on a non-object, Это, вероятно, будет ближе всего к исключению NullPointerException. Ваш экземпляр / клиентский код должен проверять создание / валидность объекта. Помимо этого вы можете установитьset_error_handler webbiedave
@ EmilVikstr & # xF6; m Это может быть не ошибка в PHP, но это ошибка в логике кода, которая является частью причины использования исключений. Chris
PHP не имеет пустых указателей. Попытка прочитать неопределенную переменную не является ошибкой и приведет лишь к уведомлению. Emil Vikström

Ваш Ответ

2   ответа
93

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

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

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

  • Throwable is the base interface for any object that can be thrown via a throw statement in PHP 7, including Error and Exception.
  • Error is the base class for all internal PHP errors.
  • AssertionError is thrown when an assertion made via assert() fails.
  • ParseError is thrown when an error occurs while parsing PHP code, such as when eval() is called.
  • TypeError There are three scenarios where a TypeError may be thrown. The first is where the argument type being passed to a function does not match its corresponding declared parameter type. The second is where a value being returned from a function does not match the declared function return type. The third is where an invalid number of arguments are passed to a built-in PHP function (strict mode only).
  • ArithmeticError is thrown when an error occurs while performing mathematical operations. In PHP 7.0, these errors include attempting to perform a bitshift by a negative amount, and any call to intdiv() that would result in a value outside the possible bounds of an integer.
  • DivisionByZeroError is thrown when an attempt is made to divide a number by zero.
  • ArgumentCountError is thrown when too few arguments are passed to a user-defined function or method.

PHP 7.3 вводит исключения JSON:

  • JsonException is thrown when json_encode() and json_decode() experience an error.

Вот диаграмма, которая демонстрирует новую иерархию, введенную в 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)
@ ex3v Думаешь, это комментарий для пользователей SO или разработчиков PHP? Chris
Пройдя лишнюю милю и связав их всех. Отлично. Chris
Спасибо Джон, но это не полный список. Поэтому я создал ответ со ссылками на документацию, в которой хранится информация. Chris
@ ex3v Я не хочу входить в SO, если я не хочу комментировать, поэтому, если он когда-либо выйдет из меня, я не могу голосовать, если я не собираюсь комментировать.
Извините за оффтоп, но мне жаль, что через 2,5 года после публикации этого ответа за него проголосовали только 17 раз.
17

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

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

Update

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

PHP Exception Hierarchy

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

@Hirnhamster Спасибо, включил изображение, чтобы заменить мертвую ссылку. Chris
php.net/~helly/php/ext/spl/classException.html не существует

Похожие вопросы