try catch无法捕获异常?

13

我有如下的代码:

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

getSingleResult() 如果没有找到行,将抛出 NoResultException。 然而,看起来我仍然收到了异常... catch 似乎没有起作用。为什么会这样?

2个回答

34

如果你的代码有命名空间,尝试使用以下方法:

catch (\Doctrine\ORM\NoResultException $e)
注意Doctrine命名空间前面的反斜杠。
需要这样做的原因是因为PHP的命名空间是相对的,而不是绝对的。
如果你的代码是命名空间为`My\Namespace`,并且你尝试捕获`Doctrine\ORM\NoResultException`,实际上它会尝试捕获`My\Namespace\Doctrine\ORM\NoResultException`。
通过在命名空间前加上`\`,你使其变成绝对路径(类似于Unix路径)。

这很可能是因为用户正在使用命名空间的Doctrine 2。 - lotsoffreetime
使用Doctrine 2并不强制你对自己的代码进行命名空间。如果你没有为你的代码指定命名空间,那么命名空间将始终被假定为根目录,在这种情况下,你就不需要初始的 \ 符号。 - Jani Hartikainen
你也可以捕获 NoResultException 并在文件头部添加 use Doctrine\ORM\NoResultException; - Yann Sagon

3

还可以添加一个

 use Exception;

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接