krafty
new Exception
Реализация исключений без try...catch
После странствий по ману выдрал один полезный примерчик.
Вот что получилось после незначительных изменений.
Можно ли такую конструкцию использовать в реальном приложении?
После странствий по ману выдрал один полезный примерчик.
Вот что получилось после незначительных изменений.
PHP:
<?php #Перехват ошибок и предупреждений
ini_set("error_log","user_log.txt");
error_reporting(E_ALL);
//определяем функцию-обработчик
function catch($errno, $errstr, $errfile, $errline)
{
//если включена собака - ничего не делаем
if (error_reporting()==0) return;
$GLOBALS['throw'] = $errstr;
$GLOBALS['throw_info'] = array(
'Message'=>$errstr
,'Code'=>$errno
,'Line'=>$errline
,'File'=>$errfile
,'Trace'=>debug_backtrace()
);
}
//примерчик
function div($a,$b)
{
if ($b==0)
//возбуждение исключительной ситуации
trigger_error("Деление на ноль");
else return $a/$b;
}
//начало потенциально опасного кода try
set_error_handler("Catch");
$z=div(5,0);
echo $z;
$y=div(5,5);
echo $y;
//перехват исключений catch
if ($GLOBALS['throw']) {
echo $GLOBALS['throw'];
//если надо - пишем ошибку в журнал
error_log($GLOBALS['throw']);
}
//восстанавливаем пред-ий обработчик
restore_error_handler()