Подтвердить что ты не робот

Исключить исключение, не делая ничего в catch

В PHP я иногда задерживаю некоторые исключения с помощью try/catch:

try {
    ...
} catch (Exception $e) {
    // Nothing, this is normal
}

С таким кодом я получаю переменную $e, которая создается ни для чего (много ресурсов), а PHP_MD (PHP Mess Detector) создает предупреждение из-за неиспользуемой переменной.

Есть ли способ поймать исключение, не создавая переменную?

Спасибо

4b9b3361

Ответ 1

Что касается всего исключения - вы можете иметь несколько разных блоков catch, чтобы поймать любые исключения, которые вы хотите обработать. Данные исключения должны быть назначены где-то, следовательно, переменная. Вы можете просто сделать что-то вроде unset($e) внутри блока catch, если вы действительно не хотите видеть эти предупреждения... или отключите предупреждения (как правило, плохая идея).

Ответ 2

Нет.

В любом случае, это вообще плохая идея, чтобы поймать исключение и ничего не делать; исключения существуют именно для того, чтобы заставить вас справиться с исключительными обстоятельствами (в противном случае выполнение прерывается), поэтому он понятен, язык не облегчает такой вариант использования.

Ответ 3

Нет, но вы можете отключить его.

try {
    ...
} catch (Exception $e) {
    unset($e);
}

Я предполагаю, что вы только перехватываете исключение, потому что вам нужно не потому, что вы этого хотите. Вы должны использовать catch, если хотите использовать try. поэтому мнения людей о том, является ли его плохая идея поймать исключение, не имеет значения. Необходимо прилагать усилия для достижения требуемого результата без использования try/catch. Насколько мне известно, альтернативы нет.

Я использую что-то вроде этого для моего шаблонизатора.

//array of templates ordered by version new to old.
for($templates as $tpl){
    try {
        $output = render($tpl,$data);
        //it worked
        break;
    } catch(ErrorException $e){
        unset($e);
    }
}
if(!empty($output)){
    return $output;
}

Ответ 4

Исключения используются не только для исключительных обстоятельств.

В этом сценарии используются исключения, чтобы убедиться, что пользователь вышел из системы. На данный момент в script очень ресурсоемко стоит выяснить, какие данные следует обрезать, чтобы на самом деле быстрее просто обрезать все это и уловить исключения.

        try {
        GDS::$DB->exec('DELETE FROM sessions WHERE session_id = ' . session_id());
        GDS::$DB->exec('DELETE FROM sessions WHERE user_id = ' . $this->data['user_id']);
    } catch(PDOException $ex) {}
    session_regenerate_id(true);
    setcookie('bis_[user_id]', 0, time() - 1, null, null, false, true);
    setcookie('bis_[session_start]', 0, time() - 1, null, null, false, true);
    setcookie('bis_[session_time]', 0, time() - 1, null, null, false, true);