【问题标题】:Newer version of "... or die(..."较新版本的“... or die(...”
【发布时间】:2011-04-01 22:44:40
【问题描述】:

很久以前,我曾经在我的 PHP 代码中使用“or die”。尤其是这样:

$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 ....

有什么喜欢的吗?气馁?最佳实践?速度总是很好。

【问题讨论】:

    标签: php exception throw die


    【解决方案1】:

    您使用的两个示例没有任何问题,只是您将它们夹在一行中。

    我不确定您在寻找什么,或者为什么您会发现 if 语句有问题 - 在这一点上,它已经过尝试并且是正确的。也就是说,您可以在or 运算符中执行类似的操作,但是在您离开后维护您的代码的人会诅咒您。

    function throw_ex($what) {
      throw $what;
    }
    
    function fails() {
      return false;
    }
    
    $x = fails() or throw_ex(new exception("failed"));
    

    我看不出这比 ol' if 语句有什么好处。

    【讨论】:

    • 由于额外的函数调用,它也不是“最快”的解决方案。 if 语句绝对是最好的
    • 我猜你是对的。我只是在寻找一些漂亮的东西:) 还想知道为什么“或抛出异常”不起作用,但“或死”和“或 soSomeFunction”确实有效。我会选择我不喜欢的第一个。
    【解决方案2】:

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

    更多信息在这里:http://arjen-lentz.livejournal.com/150464.html

    【讨论】:

      猜你喜欢
      • 2012-01-30
      • 2013-02-25
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      相关资源
      最近更新 更多