PHP любит падать в самый неподходящий момент. И тут появляются исключения — объекты, которые сигналят: «Ты сделал что-то не так». Понимать иерархию этих зверюг — не для галочки, а чтобы не ловить ошибки как слепой кот по углам.
Иерархия исключений в PHP — это как семейное дерево, где каждый родственник несёт свой набор проблем. Игнорируешь это — завтра будешь ловить ошибки в проде и материться.
Базовые типы
- Exception — это твой базовый “весёлый” родственник. Все твои самописные исключения от него наследуются.
- Error — это когда PHP решает, что нужно кинуть тебя в пропасть. Типа Notice, Warning и всякая мелочь, которую большинство игнорирует, пока не сгорит сервер.
Если коротко: Exception для твоих ошибок, Error — для ошибок PHP, которые не попадают под Exception, но всё равно больно кусаются.
Дочерние классы Exception
PHP разложил ошибки по полочкам:
- ErrorException — ловишь стандартные ошибки PHP как нормальные исключения.
- TypeError — аргумент функции не того типа. Серьёзно, PHP, ну хоть один раз проверка была бы твоя.
- ArgumentCountError — мало или много аргументов передал — улетаешь в исключение.
- ArithmeticError — тут твоя математика обосралась, деление на ноль или ещё что.
- DivisionByZeroError — строго про деление на ноль. Да, PHP отличает это от других арифметических ошибок, как будто это важно.
- ParseError — синтаксис сломался. Самый быстрый способ увидеть красный экран.
- ValueError — значение не вписывается в ожидаемый диапазон. Типа age = -5 — привет.
Да, иногда кажется, что PHP просто любит дублировать ошибки. TypeError повторяется дважды? Норм, значит PHP думает, что ты реально тупишь.
Дополнительные исключения
- PDOException — если твои запросы к базе летят в тартарары.
- SoapFault — SOAP снова решил сделать больно.
- JsonException — JSON сломался, хотя ты думал, что просто сериализуешь массив.
Короче, если работаешь с внешними сервисами, база данных или API — готовься ловить исключения, иначе твой код будет падать без предупреждений.
Как пользоваться
Чтобы не лежать лицом в клавиатуре, используй try/catch.
try {
// Код, который может выкинуть исключение
} catch (TypeError $e) {
// Сразу ловим глупые ошибки типа неправильного аргумента
} catch (Exception $e) {
// Всё остальное — общая сеть безопасности
}
Если хочешь быть аккуратным, можно несколько catch — каждая ошибка по своей полочке. Не делай один большой catch, иначе потеряешь контроль и будешь искать баги в темноте.
В итоге
- Не игнорируй иерархию. Ловить всё через
Exception— нормально для стартапа, но в серьёзном проекте это путь к хаосу. - Используй
ErrorException, если хочешь, чтобы Notices и Warnings не превращались в тихие убийцы продакшена. - Обработка ошибок — это не для красоты. Это твоя страховка.
PHP исключения — это не просто классический try/catch, это твой инструмент выживания. Если понимаешь их иерархию, меньше шансов, что твой проект будет валиться на глупых вещах.
0 комментариев