较新版本的“...或死(......)

时间:2010-08-21 02:13:46

标签: php exception throw die

很久以前我曾经在我的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 个答案:

答案 0 :(得分:2)

您使用的两个示例没有任何问题,只是您已将它们连接到一行。

我不确定你在寻找什么,或者为什么你会发现if语句的错误 - 在这一点上它是非常有用的。也就是说,你可以在or运算符中执行类似这样的操作,但是在你离开后维护代码的人会诅咒你。

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

function fails() {
  return false;
}

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

我看不出这对于'if'声明有什么影响。

答案 1 :(得分:1)

事实是,你应该使用if语句来捕获实际的,可恢复的错误。特别是如果你正在使用InnoDB,它有时会在正常操作期间出现死锁,并且处理它们的正确方法不是die(),而只是再次提交查询。

此处有更多信息:http://arjen-lentz.livejournal.com/150464.html