Выбрасывание исключения при каждой ошибке приложения - PullRequest
4 голосов
/ 14 октября 2010

У меня есть приложение, основанное на Zend Framwork. В одной модели я вызываю метод из другой модели. Когда я вызываю этот метод, я использую блок try-cath для обработки странных ситуаций. Model1.

try {
   $result  =  Module_Model2_Name->method();
} catch (Exception $e) {
   // Do Something
}

Catch должно работать, если мы обнаружим бросок в блоке try. Но я не знаю о поведении моего приложения. Если это какая-то прикладная ошибка в методе Model2, следует выдать исключение. В методе Model2 я делаю следующее, но это не работает:

set_error_handler(create_function('$m = "Error"','throw new Exception($m);'), E_ALL);

Как я могу выдать исключение при каждой ошибке приложения PHP? Большое спасибо. Извините за мой английский.

Ответы [ 2 ]

8 голосов
/ 14 октября 2010

Это выглядит хорошо для меня (проверено).

<?php
set_error_handler(create_function('$nr, $msg = "Error"','throw new Exception($m);'), E_ALL);
try{
    foreach($notHere as $var){}
}
catch(Exception $e){
    var_dump($e);
}
?>

Обратите внимание, что:

Следующие типы ошибок не могут быть обрабатывается пользовательской функцией: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING и большинство E_STRICT поднял в файле, где set_error_handler () вызывается.

Взято из руководства по PHP.

4 голосов
/ 14 октября 2010

Моя версия:

function custom_error_handler($errno, $errstr, $errfile, $errline, $errcontext)
{
    $constants = get_defined_constants(1);

    $eName = 'Unknown error type';
    foreach ($constants['Core'] as $key => $value) {
        if (substr($key, 0, 2) == 'E_' && $errno == $value) {
            $eName = $key;
            break;
        }
    }

    $msg = $eName . ': ' . $errstr . ' in ' . $errfile . ', line ' . $errline;

    throw new Exception($msg);
}

set_error_handler('custom_error_handler', E_ALL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...