Иерархия исключений в PHP
Иерархия исключений в PHP
Корневой интерфейс:
Throwable— интерфейс, реализуемый всеми выбрасываемыми объектами.
Основные ветви:
Exception— базовый класс для всех исключений, генерируемых пользовательским или библиотечным кодом.Error— базовый класс для ошибок времени выполнения, которые ранее приводили к фатальному завершению (например, вызов несуществующей функции).
Оба класса реализуют Throwable.
1. Встроенные классы, наследующие Exception
Эти исключения обычно выбрасываются явно или через стандартную библиотеку.
-
LogicException— логические ошибки, которые можно предотвратить при разработке:BadFunctionCallExceptionBadMethodCallException
DomainExceptionInvalidArgumentExceptionLengthExceptionOutOfRangeException
-
RuntimeException— ошибки, возникающие во время выполнения:OutOfBoundsExceptionOverflowExceptionRangeExceptionUnderflowExceptionUnexpectedValueException
-
PDOException— выбрасывается расширением PDO при ошибках базы данных. -
ErrorException— используется для преобразования ошибок PHP (черезset_error_handler) в исключения.
2. Встроенные классы, наследующие Error
Эти ошибки заменили многие фатальные ошибки PHP 5 и теперь могут быть перехвачены.
ArithmeticErrorDivisionByZeroError
AssertionErrorCompileErrorParseErrorTypeErrorValueError(введён в PHP 8.0)UninitializedPropertyError(введён в PHP 8.2, при доступе к непроинициализированному свойству)FiberError(введён в PHP 8.1, при некорректном использовании Fiber)
3. Другие важные исключения из стандартной библиотеки
JsonException— выбрасывается функциямиjson_encode()/json_decode()приJSON_THROW_ON_ERROR.DOMException— из расширения DOM.ReflectionException— из расширения Reflection.PharException— при работе с архивами Phar.SoapFault— из расширения SOAP.
Эти исключения наследуются от
Exception.
Особенности модели исключений в PHP:
- Начиная с PHP 7, большинство фатальных ошибок (например, вызов несуществующей функции, несовпадение типов) выбрасывают экземпляры
Error, а не завершают скрипт немедленно. ErrorиExceptionне наследуют друг друга, но оба реализуютThrowable. Поэтому для перехвата всех выбрасываемых объектов следует использовать:try {// ...} catch (Throwable $e) {// обработка и Error, и Exception}- Пользовательские исключения должны наследоваться от
Exception(или одного из его подклассов), а не отError. - Ошибки уровня
E_ERROR,E_PARSEи т.д. больше не прерывают выполнение, если они преобразованы вError(что происходит автоматически в PHP 7+).
Как получить список программно:
PHP не предоставляет встроенного способа перечислить все встроенные исключения, но можно использовать рефлексию:
$classes = get_declared_classes();
$exceptions = array_filter($classes, fn($c) => is_subclass_of($c, 'Throwable'));
sort($exceptions);
print_r($exceptions);
Этот код выведет все загруженные классы, реализующие Throwable.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Разберём детали — <?php — это начальный тег. Он говорит серверу — всё, что дальше — это PHP-код, ? — конечный тег. После него интерпретатор перестаёт выполнять PHP и возвращается к обычному режиму… Популярность PHP обусловлена простотой освоения, богатой историей, высокой совместимостью с веб-серверами и огромной экосистемой инструментов, библиотек и фреймворков. Экосистема PHP-приложений… Фундамент для начинающего программиста - что повторить, как работать, чего ожидать. Популярные CMS на PHP — WordPress — платформа для блогов и сайтов визиток, Joomla — универсальная система для порталов, Drupal — решение для сложных проектов и государственных сайтов, 1C-Битрикс —… Язык программирования PHP представляет собой уникальный феномен в истории информационных технологий — его развитие неразрывно связано с эволюцией Всемирной паутины и массовым коммерческим внедрением… Composer представляет собой инструмент управления зависимостями для языка программирования PHP. Программа обеспечивает декларативное описание библиотек, требуемых для работы конкретного проекта.… Параметр opcache.fast_shutdown ускоряет завершение работы скрипта за счёт пропуска стандартной процедуры освобождения памяти. Вместо этого используется механизм сборщика мусора операционной системы. Локальная среда разработки — это набор программных компонентов, установленных на персональном компьютере разработчика и предназначенный для создания, отладки и тестирования веб-приложений без… Набор советов, правил, принципов и обычаев в разработке на этом языке. Кэширование, сессии, отправка почты, работа с файлами, валидация — все эти функции реализованы через библиотеки (libraries) и хелперы (helpers). Библиотеки — это классы, инстанцируемые по требованию… Гайд по установке и настройке с написанием первой программы и её запуском. Примеры простых и полезных консольных приложений с демонстрацией концепций языка.PHP - язык веб-разработки
Экосистема PHP-приложений
Что требуется знать перед началом изучения языка программирования PHP
Модель исполнения PHP
История языка PHP
Composer - управление зависимостями в PHP
Настройка веб-сервера для работы с PHP
Локальная среда разработки на PHP
Рекомендации по разработке на PHP
Фреймворки и библиотеки PHP
Первая программа на PHP
Простые приложения на PHP