Обработка ошибок

В программировании имеют место две основных разновидности ошибок:

  1. Внешние ошибки;
  2. Логические ошибки.

Внешние ошибки – это ошибки, в которых код ведет себя непредвиденным образом вследствие того, что часть программы не работает так, как ожидалось. Например, произошла ошибка при установке соединения с базой данных в том случае, когда для работы кода требуется успешная установка соединения.

Логические ошибки – ошибки, возникающие вследствие неверной конструкции кода, или вследствие ошибочной логики, или из-за простейшей ошибки (например, опечатка).

Основные отличия между этими категориями ошибок:

  • Внешние ошибки возникают всегда, независимо от того, насколько безошибочен разработанный программный код. По отношению к программному коду, они даже не ошибки, поскольку являются внешними факторами по отношению к программному продукту.
  • Неучтенные в логике кода внешние ошибки могут оказаться дефектами программы.
  • Логические ошибки гораздо труднее обнаружить, чем внешние ошибки, так как их расположение по определению неизвестно. Чтобы их найти, достаточно реализовать проверку непротиворечивости данных.

В 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:

  • отображение ошибки;
  • протоколирование ошибки;
  • игнорировать ошибки;
  • обрабатывать ошибки.

Ни один из вышеперечисленных вариантов обработки ошибок не заменяет другие по важности или функциональности. Каждый из них занимает свое место в системе обработки ошибок.

Leave a Reply




*