Исключить исключение, не делая ничего в catch
В PHP я иногда задерживаю некоторые исключения с помощью try/catch:
try {
...
} catch (Exception $e) {
// Nothing, this is normal
}
С таким кодом я получаю переменную $e, которая создается ни для чего (много ресурсов), а PHP_MD (PHP Mess Detector) создает предупреждение из-за неиспользуемой переменной.
Есть ли способ поймать исключение, не создавая переменную?
Спасибо
Ответы
Ответ 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);