2010-07-04 6 views
1

Scénario: J'ai une classe qui étend une autre classe, mais la classe parente est non défini (pour une raison quelconque). J'essaie d'obtenir une classe de réflexion de la classe enfant. Lorsque je fais cela, j'obtiens une exception de classe non trouvée sur la classe parente. Cependant, je ne peux pas attraper cette exception. Qu'est-ce que je fais mal?Exception Catching de réflexion Lorsque classe parent non trouvé

Par exemple ...

<?php 
class Foo extends Bar { } 

try 
{ 
    $class = new ReflectionClass('Foo'); 
    echo 'I\'ve reflected "Foo" successfully!'; 
} 
catch (Exception $e) 
{ 
    echo 'My exception handler'; 
} 

Le résultat du code ci-dessus est une version imprimée de la classe 'Bar' not found exception. Pourquoi ma déclaration de capture ne reprend-elle pas l'exception?

merci, Kyle

+0

Votre version de PHP? Je suis arrivé Erreur fatale: Bar ne se trouve pas sur la ligne 2 – erenon

+0

5.3 La définition de classe est habituellement dans un autre fichier qui est inclus par un chargeur automatique. J'aurais pensé que toute exception rencontrée en incluant le fichier par le chargeur automatique à la suite d'essayer d'instancier son ReflectionClass aurait été interceptée dans mon bloc try-catch. Peut-être pas ... – vimofthevine

Répondre

0

En effet, l'exception a eu lieu sur cette ligne et non pas sur les lignes après try:

class Foo extends Bar { } 

Je l'ai essayé, en mettant la déclaration de classe sur un try-catch ne fonctionnera pas aussi. Assurez-vous que le Bar est inclus en premier.

+0

Y at-il de toute façon attraper une exception en incluant le fichier avec la déclaration de la classe 'Foo'? C'est pour générer de la documentation de classe, donc être valide et exécutable n'est pas nécessaire, juste être capable de reconnaître quand la classe est invalide (ie, parent non défini). Est-ce qu'il y a un moyen de faire ça? – vimofthevine

+0

Il est un peu difficile de gérer les erreurs fatales. [Voir ici] (http://stackoverflow.com/questions/277224/how-do-i-catch-a-php-fatal-error). Si c'était moi, j'ouvrirais et analyserais probablement le fichier inclus (c.-à-d. Foo.php) comme un fichier texte et regex mon chemin à travers le code pour trouver 'extends Bar' et vérifier s'il existe avec [class_exists] (http://php.net/manual/fr/function.class-exists.php). – Shiki

Questions connexes