2012-02-25 27 views
6

我有这样的代码:ReflectionException无法被捕获?

namespace Some\Different\Name; 
     try { 
      $reflect = new ReflectionClass($class); 
X:   $instance = $reflect->newInstanceArgs($args); 
     } catch (ReflectionException $e) { 
      exit($e->getMessage()); 
     } 

,我测试它试图使ReflectionException被抛出。它给了我:

Fatal error: Uncaught exception 'ReflectionException' with message 'Class MyClass does not have a constructor, so you cannot pass any constructor arguments' in ... on line X.

我在做什么错? PS:我知道为什么抛出异常,我只想知道它为什么没有被捕获!

+0

真的很奇怪。一个通用的catch(Exception $ e)会捕获它吗? – 2012-02-25 02:32:50

+1

请添加该错误的回溯。 – hakre 2012-02-25 02:40:35

+0

@MikePurcell,它没有。 – Shoe 2012-02-25 02:48:07

回答

6

最后。这是一个命名空间问题。奇怪的是,PHP没有通知您正在尝试捕获当前名称空间中不存在的类型异常(ReflectionException)。

只需将\加到\ReflectionException就能帮我解决问题,因为现在它能够找到我实际寻找的异常类型。

另一种解决方案是添加:

use \ReflectionException; 

空间声明之后。

+2

有自动加载,所以PHP不会事先知道未来会带来哪些异常;)PHP告诉你,有一个未捕获的异常,甚至命名它......在处理命名空间时很容易监督。发生在我们最好的事情上。 – hakre 2012-02-25 03:06:21