Обработка ошибок
- 27 February, 2008
- Posted in PHP
Tags : PHP, ошибка- No Comment
В программировании имеют место две основных разновидности ошибок:
- Внешние ошибки;
- Логические ошибки.
Внешние ошибки – это ошибки, в которых код ведет себя непредвиденным образом вследствие того, что часть программы не работает так, как ожидалось. Например, произошла ошибка при установке соединения с базой данных в том случае, когда для работы кода требуется успешная установка соединения.
Логические ошибки – ошибки, возникающие вследствие неверной конструкции кода, или вследствие ошибочной логики, или из-за простейшей ошибки (например, опечатка).
Основные отличия между этими категориями ошибок:
- Внешние ошибки возникают всегда, независимо от того, насколько безошибочен разработанный программный код. По отношению к программному коду, они даже не ошибки, поскольку являются внешними факторами по отношению к программному продукту.
- Неучтенные в логике кода внешние ошибки могут оказаться дефектами программы.
- Логические ошибки гораздо труднее обнаружить, чем внешние ошибки, так как их расположение по определению неизвестно. Чтобы их найти, достаточно реализовать проверку непротиворечивости данных.
В PHP имеется встроенная поддержка обработки ошибок. Существует три основных уровня серьезности ошибок:
- E_NOTICE – незначительные исправимые ошибки, существующие для того, чтобы помочь программисту идентифицировать возможные дефекты кода.
- E_WARNING – исправимые ошибки времени выполнения. Они сообщают о нежелательном событии, не прерывая и не изменяя работу сценария.
- E_ERROR – неисправимые ошибки. Прерывают работу выполняемого сценария.
И еще 5 категорий ошибок, которые возникают несколько реже:
- E_PARSE – сценарий содержит синтаксическую ошибку и не может пройти синтаксический анализ. Неисправимая ошибка.
- E_COMPILE_ERROR – ошибка, возникающая в ядре во время трансляции текста. Также не исправима.
- E_COMPILE_WARNING – ошибка, возникшая в ядре во время синтаксического анализа сценария. Исправимая ошибка.
- E_CORE_ERROR – неисправимая ошибка времени выполнения, возникающая в ядре.
- E_CORE_WARNING – исправимая ошибка времени выполнения, возникающая в ядре.
Также существует категория ошибок E_ALL, которая включает в себя все уровни отображаемых ошибок.
В PHP имеется функция trigger_error(), которая дает возможность пользователю генерировать внутри сценария собственные ошибки. Всего три типа ошибок доступных для генерации пользователем:
- E_USER_NOTICE
- E_USER_WARNING
- E_USER_ERROR
Контроль отображения ошибок возникших в сценарии
Управлять уровнем выводимых ошибок можно с помощью опции error_reporting в конфигурационном файле php.ini.
error_reporting – битовое поле, в котором используются определенные константы.
Например:
error_reporting = E_ALL - отображать все ошибки.
error_reporting = E_ALL ~E_NOTICE - отображать все ошибки кроме E_NOTICE
error_reporting = E_ERROR | E_USER_ERROR - отображать E_ERROR или E_USER_ERROR.
Обратите внимание, что удаление E_ERROR из уровня error_reporting не разрешает игнорировать неисправимые ошибки, а только предотвращает вызов обработчика ошибок!
Варианты обработки ошибок, соответствующих порогу error_reporting:
- отображение ошибки;
- протоколирование ошибки;
- игнорировать ошибки;
- обрабатывать ошибки.
Ни один из вышеперечисленных вариантов обработки ошибок не заменяет другие по важности или функциональности. Каждый из них занимает свое место в системе обработки ошибок.