尝试catch没有捕获异常?

时间:2010-12-19 14:19:38

标签: php exception

我的代码如下

try {
  $user = $query->getSingleResult();
} catch (Doctrine\ORM\NoResultException $e) {
  return null;
} catch (Exception $e) {
  return null;
}
如果没有找到行,

getSingleResult()将抛出NoResultException。似乎我仍然得到例外......捕获似乎不起作用。那是为什么?

2 个答案:

答案 0 :(得分:34)

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

catch (\Doctrine\ORM\NoResultException $e)

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

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

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

通过在名称空间前加上\,使其成为绝对名称(类似于unix pathnames)

答案 1 :(得分:2)

还可以添加

 use Exception;

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