2012-02-25 9 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)'はそれをキャッチしますか? –

+1

そのエラーのバックトレースを追加してください。 – hakre

+0

@MikePurcell、そうではありません。 – Shoe

答えて

6

最後に、これは名前空間の問題でした。 PHPが、現在の名前空間に存在しない型(ReflectionException)の例外をキャッチしようとしていることをPHPが通知しないというのは奇妙です。

\\ReflectionExceptionを追加するだけで、私が実際に探しているタイプの例外を見つけることができるようになりました。

別の解決策を追加することです:

use \ReflectionException; 

だけ名前空間宣言の後。

+2

オートローディングがあるので、PHPは未来の例外を事前に知ることはできません;)そして、PHPはキャッチされていない例外があり、名前をつけたと言っています...名前空間を扱うときに監督するのは簡単です。私たちの最高に起こった。 – hakre

関連する問題