尝试catch没有捕获异常?

Jie*_*eng 12 php exception

我有如下代码

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

getSingleResult()NoResultException如果没有找到行将抛出.似乎我仍然得到例外......捕获似乎不起作用.这是为什么?

Jan*_*nen 34

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

catch (\Doctrine\ORM\NoResultException $e)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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