правильный способ использования обработчика ошибок throw throw - PullRequest
4 голосов
/ 19 апреля 2009

Я столкнулся с этой функцией ниже, и мне интересно, правильно ли это использовать обработку ошибок в try / catch.

public function execute()
{
    $lbReturn = false;
    $lsQuery = $this->msLastQuery;
    try
    {
        $lrResource = mysql_query($lsQuery);

        if(!$lrResource)
        {
            throw new MysqlException("Unable to execute query: ".$lsQuery);
        }
        else
        {
            $this->mrQueryResource = $lrResource;
            $lbReturn = true;
        }

    }
    catch(MysqlException $errorMsg)
    {
        ErrorHandler::handleException($errorMsg);
    }
    return $lbReturn;
}

Ответы [ 4 ]

5 голосов
/ 19 апреля 2009

Codewise это правильно / работает, однако сила try-catch заключается в том, что когда в одной из функций, которые вы вызываете, создается исключение из глубины.
Из-за «остановки выполнения средней функции и перехода обратно к блоку catch».

В этом случае нет глубоких исключений, поэтому я бы написал так:
(Предполагается, что в ErrorHandler есть функция handleErrorMessage.)

public function execute() {
    $lsQuery = $this->msLastQuery;
    $lrResource = mysql_query($lsQuery);

    if(!$lrResource) {
         ErrorHandler::handleErrorMessage("Unable to execute query: ".$lsQuery);
         return false;
    }
    $this->mrQueryResource = $lrResource;
    return true;
}

Который я нахожу более читабельным.

5 голосов
/ 19 апреля 2009

Нет. Бросок исключения в этом случае - просто GOTO, но с (немного) более симпатичным лицом.

1 голос
/ 19 апреля 2009

Зачем в любом случае вызывать ErrorHandler :: handleException?

Просто брось исключение, но никогда не лови его. Тогда в глобальном коде инициализации для вашего приложения есть функция со следующей подписью:

function catchAllExceptions(Exception $e)

Тогда звоните:

set_exception_handler('catchAllExceptions');

Это приведет к тому, что все необработанные исключения будут переданы в качестве аргумента catchAllExceptions (). Хорошая обработка всех необработанных исключений в одном месте, так как вы сокращаете репликацию кода.

0 голосов
/ 19 апреля 2009

Ну, это не очень хорошая реализация, так как вы выкидываете исключение и ищете это исключение в catch. Так что ответ Visage верен.

  1. Вы должны использовать глобальный обработчик ошибок вместо использования tr-catch, как в вашем коде.
  2. Если вы не уверены в типе ошибки и возникновения, но хотите продолжить выполнение кода, хотя и возникла исключительная ситуация, тогда блок try-catch поможет.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...