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

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

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

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

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

Ответы на вопрос(2)

Решение Вопроса

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

Exception ErrorException

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

BadFunctionCallException A callback refers to an undefined function or if some arguments are missing. BadMethodCallException A callback refers to an undefined method or if some arguments are missing. DomainException A value does not adhere to a defined valid data domain. InvalidArgumentException The arguments passed were invalid. LengthException The parameter exceeds the allowed length (used for strings, arrays, file size, etc.). LogicException Generic error occured in program logic. OutOfBoundsException An illegal index was requested. OutOfRangeException An illegal index was requested. This represents errors that should be detected at compile time. OverflowException Adding an element to a full container. RangeException Indicate range errors during program execution. Normally this means there was an arithmetic error other than under/overflow. RuntimeException An error which can only be found on runtime occurs. UnderflowException Performing an invalid operation on an empty container, such as removing an element. UnexpectedValueException An unexpected value was received (i.e. as the result of a returned value from a method call).

В 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)
 Chris31 мая 2012 г., 19:25
Спасибо Джон, но это не полный список. Поэтому я создал ответ со ссылками на документацию, в которой хранится информация.
 18 нояб. 2015 г., 18:07
@ ex3v Я не хочу входить в SO, если я не хочу комментировать, поэтому, если он когда-либо выйдет из меня, я не могу голосовать, если я не собираюсь комментировать.
 11 дек. 2014 г., 13:32
Извините за оффтоп, но мне жаль, что через 2,5 года после публикации этого ответа за него проголосовали только 17 раз.
 Chris24 февр. 2015 г., 13:55
@ ex3v Думаешь, это комментарий для пользователей SO или разработчиков PHP?
 Chris31 мая 2012 г., 21:36
Пройдя лишнюю милю и связав их всех. Отлично.

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

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

 Chris24 февр. 2015 г., 14:02
@Hirnhamster Спасибо, включил изображение, чтобы заменить мертвую ссылку.
 17 авг. 2014 г., 18:08

Ваш ответ на вопрос