Более новая версия "... или умри (..." - PullRequest
1 голос
/ 21 августа 2010

Давным-давно я использовал «или умру» в своем коде 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 ]

2 голосов
/ 21 августа 2010

В этих двух примерах нет ничего плохого, кроме того, что вы поместили их в одну строку.

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

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

function fails() {
  return false;
}

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

Я не понимаю, как это дает вам что-то большее, чем утверждение "если бы".

1 голос
/ 21 августа 2010

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

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

...