124 votes

Recherche du fichier PHP (au moment de l'exécution) où une classe était définie

Est-il de toute réflexion/introspection/magie en PHP qui vous permettra de trouver le fichier PHP où une classe particulière (ou la fonction) a été défini?

En d'autres mots, j'ai le nom d'une classe PHP, ou un objet instancié. Je veux passer ce à quelque chose (de fonction, de Réflexion, de classe, etc.) qui retourne le chemin du fichier où la classe a été définie.

/path/to/class/definition.php

Je me rends compte que je pouvais utiliser (get_included_files()) pour obtenir une liste de tous les fichiers qui ont été inclus à ce jour et ensuite les analyser manuellement, mais c'est beaucoup d'accès au système de fichiers pour une seule tentative.

Je me rends compte aussi que je pouvais écrire du code supplémentaire dans notre __autoload mécanisme qui met en cache cette information quelque part. Cependant, la modification de l'existant __autoload est hors des limites dans la situation que j'ai en tête.

Audience sur les extensions qui peuvent le faire, ce serait intéressant, mais je préfère en fin de compte comme quelque chose qui peut s'exécuter sur un "stock" d'installer.

250voto

Gordon Points 156415

Essayer

Exemple:

 class Foo {}
$reflector = new ReflectionClass('Foo');
echo $reflector->getFileName();
 

Cela renverra false lorsque le nom du fichier ne pourra pas être trouvé, par exemple sur des classes natives.

0voto

Seaux Points 1546

si vous avez un dossier includes, vous pouvez exécuter une commande de script shell sur "grep" pour "class $ className" en procédant de la manière suivante: $filename = `grep -r "class $className" $includesFolder/* `et il renverra le fichier dans lequel il se trouve. ne pensez pas qu'il existe une fonction magique permettant à PHP de le faire pour vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X