Профессиональное программирование на PHP

Страница 82 из 591


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

Эти ошибки можно сгенерировать так:

while(lfeof($fp)) { $line = fgets($fp); if(!parse_line($line)) {

trigger_error("Неизвестный тип данных", E_USER_NOTICE);

}

}

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

 E_PARSE— сценарий содержит синтаксическую ошибку и не может пройти синтаксический анализ. Это неисправимая ошибка.

 E_COMPILE_ERROR— неисправимая ошибка, возникшая в ядре во время трансляции сценария.

 ECOMPILEWARNING — исправимая ошибка, возникшая в ядре во время синтаксического анализа сценария.

 E_CORE_ERROR — неисправимая ошибка времени выполнения, возникающая в ядре.

 E_CORE_WARNING — исправимая ошибка времени выполнения, возникающая в ядре.

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

Контролировать уровень ошибок, которые возникли в сценарии, можно с помощью опции error_reporting в файле php. ini. error_reporting — битовое поле, в котором используются определенные константы, например, ниже приведена константа для всех ошибок:

error_reporting = E_ALL

В директиве error_reporting для отображения всех ошибок, кроме E_NOTICE, используется следующая XOR-операция над E_ALL и E_NOTICE:

error_reporting = E_ALL - E_NOTICE

Аналогично, только для неисправимых ошибок в error_reporting используется побитовая операция выбора из двух типов ошибок:

error_reporting = E_ERROR | E_USER_ERROR

Следует отметить, что удаление E_ERROR из уровня error_reporting не разрешает игнорировать неисправимые ошибки, а только предотвращает вызов обработчика ошибок.

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

Теперь, когда известно, какие ошибки генерирует РНР, необходимо создать план их обработки. В РНР программисту предоставляется четыре варианта обработки ошибок, соответствующих порогу error_reporting:




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006