2012-02-25 15 views
6

Ho questo codice:ReflectionException non può essere catturato?

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

e sto testando che cercando di fare un ReflectionException essere gettato. E mi dà:

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.

Cosa sto facendo male?

PS: so perché viene lanciata l'eccezione, voglio solo sapere perché non viene catturato!

+0

Stranamente. Lo prenderà un generico 'catch (Exception $ e)? –

+1

Si prega di aggiungere il backtrace di tale errore. – hakre

+0

@ MikePurcell, non è così. – Shoe

risposta

6

Infine. Era un problema di namespace. È strano dal fatto che PHP non notifica che stai cercando di rilevare un'eccezione di un tipo (ReflectionException) che non esiste nello spazio dei nomi corrente.

L'aggiunta di \ a \ReflectionException mi ha aiutato perché ora è in grado di trovare il tipo di eccezione che sto effettivamente cercando.

Un'altra soluzione sarebbe quella di aggiungere:

use \ReflectionException; 

subito dopo la dichiarazione dello spazio dei nomi.

+2

C'è l'autoloading, quindi PHP non sa in anticipo quali eccezioni il futuro porterà;) E PHP ti ha detto che c'è un'eccezione non rilevata e anche nominata ... è semplice sorvegliare quando si ha a che fare con i namespace. È successo al meglio di noi. – hakre

Problemi correlati