Undr

На память

Переводим ошибки php в Exception

1 Star2 Stars3 Stars4 Stars5 Stars (3 голосов, средний: 2.33 из 5)
Loading ... Loading ...

without comments

Очень жаль что до сих пор в php не сделали нормальную поддержку Exception. Небольшой трюк описанный ниже позволяет на почти все ошибки php вызывать исключение, которое мы можем потом отловить и обработать, если необходимо.

PHP позволяет определять обработчик ошибок. Для этого нужно определить функцию с параметрами:

  • $errno – тип ошибки;
  • $errmsg – сообщение об ошибке;
  • $filename – имя файла, где произошла ошибка;
  • $linenum – номер строки;
  • $errcontext – контекст (как правило массив с переменными),

которая будет обрабатывать ошибку и зарегистрировать ее используя функцию set_error_handler.

Итак пишем функцию-обработчик. Все просто она должна вызывать исключение:

<?php
function PHP_errorHandler($errno, $errmsg, $filename, $linenum, $errcontext ) {
    throw new ErrorException($errmsg, 0, $errno, $filename, $linenum);
}
?>

Теперь регистрируем функцию:

if(set_error_handler("PHP_errorHandler", E_ALL & ~E_NOTICE) === false){
    exit("Обработчик ошибок не зарегистрирован");
};
?>

Проверяем:

try {
    unlink("any-not-existed.file");
} catch (Exception $e) {
    echo $e->getMessage();
}
try {
    array_flip();
} catch (Exception $e) {
    echo $e->getMessage();
}

К сожалению обработчик ошибок не ловит ошибки следующих типов: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, поэтому следующий код не вызовет исключения, а отобразится в браузер, как обычная ошибка.

try {
    xxx(); // Несуществующая функция
} catch (Exception $e) {
    echo $e->getMessage();
}

При необходимости можем восстановить обработчик по умолчанию:

restore_error_handler();

Написал undr ()

12 ноября 2009 в 14:02

Размещено в Примеры, Программирование

Метки:

Оставьте комментарий