Tuesday, September 23, 2008

Конвертирование ошибок в exceptions.

Задача
Преобразовать все ошибки в исключения (exceptions) для более удобной их обработки.
Решение подсмотрено на php.net в комментариях.

class My_Exception extends Exception {
public static function errorHandlerCallback($code, $string, $file, $line, $context)
{
$e = new self($string, $code);
$e->line = $line;
$e->file = $file;
$e->context = $context;
throw $e;
}

}

set_error_handler(array("My_Exception", "errorHandlerCallback"), E_ALL);



Теперь практически все ошибки будут преобразованны в Exception. Теперь достаточно легко и непринужденно мы можем отлавливать ошибки php в одном месте, например



// bla bla bla
try
{
$controller->dosmth();
}
catch( Controller_Wrong_Data_Exeption $e)
{
// do smth
}
catch ( My_Exception $e)
{
// we know it's php error
}



Такой метод не ловит фаталы, а очень хочется. Где то встречал решение с использованием особенности ob_start, ob_flush, если найду завтра добавлю.

No comments:

 
Каталог сайтов, Добавить сайт