2012-02-25 11 views
6

mam ten kod:ReflectionException nie można złapać?

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

a ja testuje to próbuje zrobić ReflectionException zostać wyrzucony. I to daje mi:

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.

Co robię źle?

PS: Wiem, dlaczego wyjątek jest rzucony, chcę tylko wiedzieć, dlaczego nie został złapany!

+0

Dziwne. Czy uda się go przechwycić generycznym 'catch (Exception $ e)? –

+1

Proszę dodać ślad śledzenia tego błędu. – hakre

+0

@MikePurcell, Nie ma. – Shoe

Odpowiedz

6

Wreszcie. To był problem przestrzeni nazw. Dziwne jest to, że PHP nie informuje, że próbujesz przechwycić wyjątek typu (ReflectionException), który nie istnieje w bieżącym obszarze nazw.

Po prostu dodałem \ do \ReflectionException pomogło mi, ponieważ teraz jest w stanie znaleźć typ wyjątku, którego naprawdę szukam.

Innym rozwiązaniem byłoby dodać:

use \ReflectionException; 

tuż po deklaracji przestrzeni nazw.

+2

Istnieje automatyczne ładowanie, więc PHP nie wie z góry, jakie wyjątki przyniesie przyszłość;) A PHP powiedziało ci, że istnieje niezniszczalny wyjątek, a nawet go nazwał ... łatwo go nadzorować, gdy mamy do czynienia z przestrzeniami nazw. Zdarzyło się to najlepszemu z nas. – hakre

Powiązane problemy