2012-02-25 8 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.

내가 뭘 잘못하고 있니?

추신 : 나는 왜 예외가 던져 지는지, 나는 단지 그것이 잡히지 않은 이유를 알고 싶다!

+0

정말 이상합니다. 일반'catch (Exception $ e)'가이를 잡을까요? –

+1

해당 오류의 백 트레이스를 추가하십시오. – hakre

+0

@MikePurcell, 그렇지 않습니다. – Shoe

답변

6

마지막으로 네임 스페이스 문제였습니다. PHP가 현재 네임 스페이스에 존재하지 않는 타입 (ReflectionException)의 예외를 잡으려고한다는 것을 알리지 않는다는 것은 이상합니다.

\\ReflectionException에 추가하면 실제로 어떤 유형의 예외가 실제로 있는지 찾을 수 있기 때문에 도움이되었습니다.

또 다른 솔루션을 추가하는 것입니다 :

use \ReflectionException; 

바로 네임 스페이스 선언 후.

+2

자동 로딩이 있기 때문에 PHP는 미래에 어떤 예외가 발생할지 미리 알지 못합니다;) 그리고 PHP는 캐치되지 않은 예외가 있으며 심지어 이름을 지정했다고 말했습니다 ... 네임 스페이스를 다룰 때이를 감독하기가 쉽습니다. 우리 중 최고 일이 생겼습니다. – hakre

관련 문제