2012-02-25 89 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