Php try-catch不捕获异常?

Php try-catch不捕获异常?,php,exception,Php,Exception,我有如下代码 try { $user = $query->getSingleResult(); } catch (Doctrine\ORM\NoResultException $e) { return null; } catch (Exception $e) { return null; } 如果找不到行,getSingleResult()将抛出NoResultException。看来我还是有例外。。。这个陷阱似乎不起作用。为什么会这样?如果您的代码具有名称空间,请尝试使用:

我有如下代码

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

如果找不到行,
getSingleResult()
将抛出
NoResultException
。看来我还是有例外。。。这个陷阱似乎不起作用。为什么会这样?

如果您的代码具有名称空间,请尝试使用:

catch (\Doctrine\ORM\NoResultException $e)
请注意原则名称空间前面的反斜杠

之所以需要这样做,是因为PHP的名称空间是相对的,而不是绝对的

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


通过在名称空间前面加一个\可以使其成为绝对的(类似于unix路径名)

也可以添加一个

 use Exception;

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

这很可能是因为用户使用的是带名称空间的条令2。但是,使用条令2并不强制您为自己的代码命名名称空间。在没有为代码指定名称空间的情况下,名称空间总是假定在根目录下,在这种情况下,您不需要首字母\您也可以只捕获
NoResultException
并添加
use-Doctrine\ORM\NoResultException在文件头中。