2010-08-21 3 views
1

Долгое время назад я имел обыкновение использовать „или умереть“ в моем PHP код Особенно нравится это:.Следующая версия «... или умереть (...»

$q = mysql_query('......') or die(mysql_error()); 

Очевидно, что это довольно позорное в эти дни, но X или принцип Y еще говорит мне Так я, хотя я хотел бы попробовать это:.!.

$r = $this->exec($query) or throw new Exception('FAIL'); 

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

мне не нравится

if (!($r = $this->exec($query))) throw new ... 

или

$r = $this->exec($query) 
if (!$r) throw new .... 

Любые фавориты? Разочарованиях? Лучшие практики? Скорость всегда хорошая.

ответ

2

Нет ничего плохого в двух примерах, которые вы использовали, за исключением того, что вы отложили их на одной линии.

Я не уверен, что вы ищете, или почему вы находите ошибку в утверждении if - на данный момент это довольно верно и верно. Тем не менее, вы можете сделать что-то вроде этого для обувного рожка в операторе or, но тот, кто сохранит ваш код после того, как вы уйдете, проклинает вас.

function throw_ex($what) { 
    throw $what; 
} 

function fails() { 
    return false; 
} 

$x = fails() or throw_ex(new exception("failed")); 

Я не вижу, как это набирает у вас что-либо над заявлением ol 'if.

+0

Это не «быстрый» решение либо из-за вызова дополнительных функций. Если утверждения, безусловно, лучшие – GWW

+0

Я думаю, вы правы. Я просто искал что-то пятно :) Также интересно, почему «или бросить исключение» не работает, но «или умереть» и «или soSomeFunction» работают. Я собираюсь пойти с первым, что мне не нравится. – Rudie

1

Дело в том, что вы должны использовать операторы if для фиксации фактических, восстанавливаемых ошибок. Особенно, если вы используете InnoDB, который иногда может иметь взаимоблокировки во время нормальной работы, и правильный способ их обработки - не умереть(), а просто отправить запрос еще раз.

Больше информации здесь: http://arjen-lentz.livejournal.com/150464.html

Смежные вопросы