Ошибки в PHP — это как неожиданные гости: никогда не знаешь, когда придут, и что после себя оставят. Но если научиться с ними правильно обращаться, ваш код станет надёжнее, а вы — спокойнее. В этой статье разберём, чем отличаются ошибки от исключений, как их ловить и обрабатывать, и почему без этого не обходится ни один серьёзный проект.
Чем ошибка отличается от исключения
В PHP есть два механизма работы с проблемами: ошибки (errors) и исключения (exceptions). Ошибки — это низкоуровневые сбои: например, вызов несуществующей функции, деление на ноль или синтаксическая ошибка. Исключения — это объекты, которые вы или сам PHP выбрасываете, когда что-то пошло не так. Их можно поймать и обработать.
До PHP 7 ошибки было сложно перехватывать. Но с выходом PHP 7 появился интерфейс Throwable, который объединяет и Error, и Exception. Теперь можно ловить почти всё.
Вот простая аналогия: ошибка — это когда у вас внезапно отключили электричество. Исключение — это когда вы сами выключили свет, потому что уходите. Второе можно предвидеть и обработать.
Конструкция try-catch: ловим исключения
Основной инструмент для работы с исключениями — блок try...catch. В try вы пишете код, который может выбросить исключение, а в catch — что делать, если оно произошло.
Но чаще мы имеем дело с исключениями, которые выбрасываем сами. Например, при валидации данных:
getMessage();
}
Можно ловить разные типы исключений в разных блоках catch. Это позволяет гибко реагировать на разные ситуации.
Порядок важен: более специфичные исключения должны идти раньше, чем общие.
Пользовательские исключения: создаём свои
Иногда стандартных исключений не хватает. Тогда можно создать своё, унаследовавшись от Exception или Error. Это помогает лучше понять, что именно пошло не так.
getMessage();
}
Создание своих исключений — хорошая практика, потому что они делают код самодокументируемым и упрощают отладку.
Обработка ошибок: set_error_handler и error_reporting
Ошибки в PHP можно перехватывать с помощью set_error_handler(). Это позволяет превратить обычные ошибки в исключения или записать их в лог.
getMessage();
}
Важно настроить error_reporting() так, чтобы в разработке вы видели все ошибки, а на продакшене — только критические, иначе пользователи увидят лишнее.
Логирование ошибок: чтобы не гадать
Логи — ваш лучший друг. Вместо того чтобы выводить ошибки на экран, лучше писать их в файл или специальную систему (например, Sentry). PHP умеет логировать ошибки автоматически, если включить log_errors.
Но можно и вручную логировать исключения:
getMessage(), 3, '/var/log/my_app_errors.log');
// и дальше можно что-то сделать, например, показать пользователю заглушку
}
Используйте библиотеки вроде Monolog для удобного логирования. Они позволяют писать логи в разные места и с разными уровнями важности.
Правила и лайфхаки
catch. Если поймали исключение, что-то с ним сделайте: залогируйте, покажите сообщение, выбросьте дальше. Иначе ошибка просто исчезнет, и вы будете долго искать причину.
Вот ещё несколько советов, которые сэкономят вам часы отладки:
- Используйте
finallyдля кода, который должен выполниться в любом случае (например, закрытие файла или соединения). - Не злоупотребляйте исключениями для управления потоком. Они для исключительных ситуаций.
- В продакшене всегда отключайте вывод ошибок на экран, но включайте логирование.
- Создавайте иерархию исключений для вашего приложения, чтобы различать типы ошибок.
И ещё одна таблица, которая поможет быстро вспомнить основные функции и настройки:
| Функция/настройка | Назначение |
|---|---|
try...catch |
Ловля исключений |
throw |
Выброс исключения |
set_error_handler() |
Перехват ошибок |
error_reporting() |
Уровень отображаемых ошибок |
error_log() |
Запись в лог |
finally |
Блок, выполняемый всегда |
Что в итоге
Обработка ошибок и исключений — это не просто «надо», это обязательная часть качественного кода. Она делает приложение устойчивым к сбоям, упрощает поддержку и спасает нервы разработчику. Запомните главное: ловите исключения, логируйте ошибки, не оставляйте пустых catch и настраивайте окружение правильно. Тогда ваш PHP-код станет надёжным, как швейцарские часы.
Студия WNDER



