【问题标题】:try catch does not catch exception?try catch 不捕获异常?
【发布时间】:2011-05-27 20:49:41
【问题描述】:

我有如下代码

try {
  $user = $query->getSingleResult();
} catch (Doctrine\ORM\NoResultException $e) {
  return null;
} catch (Exception $e) {
  return null;
}

如果没有找到行,getSingleResult() 将抛出 NoResultException。看来我仍然遇到异常... catch 似乎不起作用。这是为什么呢?

【问题讨论】:

    标签: php exception


    【解决方案1】:

    也可以加个

     use Exception;
    

    在类的顶部,它将解析 try/catch 块中使用的 Exception 类名。

    【讨论】:

      【解决方案2】:

      如果您的代码是命名空间的,请尝试使用:

      catch (\Doctrine\ORM\NoResultException $e)
      

      注意 Doctrine 命名空间前面的反斜杠。

      您需要这样做的原因是因为 PHP 的命名空间是相对的,而不是绝对的。

      如果您的代码命名空间为My\Namespace,并且您尝试捕获Doctrine\ORM\NoResultException,实际上它会尝试捕获My\Namespace\Doctrine\ORM\NoResultException

      通过在命名空间前加上 \ 前缀,您可以将其设为绝对(类似于 unix 路径名)

      【讨论】:

      • 这很可能是因为用户正在使用 命名空间的 Doctrine 2。
      • 虽然使用 Doctrine 2 并不会强制您为自己的代码命名。如果您没有为代码指定命名空间,则始终假定命名空间位于根目录,在这种情况下,您不需要初始的 \
      • 您也可以捕获NoResultException 并在文件头中添加use Doctrine\ORM\NoResultException;
      猜你喜欢
      • 2015-06-21
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多