|
Веб-курсы Что это? Оглавление Основы Основы основ Практика Гостевая книга Простой сайт Структура сайта (MVC) Ядро (Light) Ядро Гостевая на SQL Статические страницы Модуль новостей Система регистрации Теория Дебаггинг Регулярные выражения Введение в ООП Паттерны проектирования Репозитарий BB-code Почтовый класс Пагинатор Всякие полезности Download Полезные утилиты Разное Видеокурсы Последние изменения Вопросы и замечания сюда Реклама Диеты для похудения Фреймворк Kohana. Обучение. Мануал на русском. |
Обработка исключений
Исключение, или исключительная ситуация - это такой поворот событий, когда скрипт начинает работать в нештатном режиме. Другими словами - сбой программы. Вот рассмотрим простейший код. Смоделируем боевую ситуацию, когда вывод ответа интерпретатора о ошибках совсем не желателен. Их лучше не показывать ни в чем неповинному юзеру. Он не заслужил такого стресса. Да и хакерам совсем не обязательно знать о тонких местах скрипта. Вот такой код не покажет ничего, хотя файла dummy.txt не существует
Однако иногда нужно всеже как то отреагироать на это безобразие. Тут применяются разные способы (if... else, or die и так далее).
Теперь ошибка будет выдана более пристойно и менее информативно. Есть еще один способ решения такой проблемы - блоки try... catch. Это нововведение в PHP 5-й версии помогает разделить код на участки, и вывести все случившиеся недоразумения в одном месте.
Давайте заглянем этой конструкции под юбку. Как это устроено. В PHP 5-й версии предусмотрен встроенный класс Exception. Он реагирует на ошибки, помогая правильно их обработать. Тут мы нужный участок поместили в блок try{...}. Как только в ходе выполнения появится ошибка, оператором throw в этот блок будет "выброшен" объект класса Exception, выполнение последующего кода прервется, а сам объект будет передан в блок catch. Класс Exception содержит несколько стандартных методов и может принимать два аргумента. Первый - сообщение о ошибке, второй - её код (устанавливаем сами). Код ошибки может помочь разобраться, какие действия произвести в блоке catch. Вот примерно так можно этим пользоваться.
В блоке catch{...} можно не только выдавать сообщения, но и производить любые другие действия. Логировать ошибки, отправлять сообщение не E-mail администратора, перенаправлять юзера на специальную страницу ошибок и так далее. Как и любой другой, класс Exception можно наследовать, расширяя существующий функционал. При этом можно использовать несколько блоков catch{...}, каждый для своего объекта. А еще можно вкладывать блоки друг в друга, передавая исключения по инстанции.
Вот примерно так. По поводу того, когда и стоит ли вообще использовать исключения, постоянно идут религиозные войны. Одно определенно точно - не стоит ими увлекаться. Местами может они и удобны, но в целом приложение обрастает мертвым кодом, так как они полезны в основном при отладке. Ну и на мой взгляд совершенно не придают читабельности или удобства. Готовый к бою код должен предполагать самый минимум возможности возникновения исключительных ситуаций, а значит все это будет лишним и ненужным. Кроме того, нужно учитывать ресурсоемкость данной операции. Если скрипт работает ровно, без ошибок, то ничего страшного. Но если появится ошибка, то обработка исключения потребует ресурсов больше, чем тот же or die в 20 и более раз. Лично я предпочитаю более легкую кавалерию, если не требуется каких то специфических условий:
Синтаксис такой конструкции более прост, код неизбыточен, более читабелен, а основной функционал сохраняется Собственно решать Вам, все как обычно. |