Y a-t-il une réflexion / introspection / magie en PHP qui vous permettra de trouver le fichier PHP où une classe (ou une fonction) particulière a été définie?
En d'autres termes, j'ai le nom d'une classe PHP, ou d'un objet instancié. Je veux passer cela à quelque chose (fonction, classe Reflection, etc.) qui renverrait le chemin du système de fichiers où la classe a été définie.
/path/to/class/definition.php
Je me rends compte que je pourrais utiliser ( get_included_files())
pour obtenir une liste de tous les fichiers qui ont été inclus jusqu'à présent, puis les analyser tous manuellement, mais c'est beaucoup d'accès au système de fichiers pour une seule tentative.
Je me rends également compte que je pourrais écrire du code supplémentaire dans notre mécanisme __autoload qui met en cache ces informations quelque part. Cependant, la modification du __autoload existant est interdite dans la situation que j'ai à l'esprit.
Entendre parler d'extensions qui peuvent faire cela serait intéressant, mais j'aimerais finalement quelque chose qui peut fonctionner sur une installation "stock".
la source
Réponses:
Essayer
ReflectionClass
Exemple:
Cela reviendra
false
lorsque le nom de fichier est introuvable, par exemple sur les classes natives.la source
Pour ReflectionClass dans un fichier à espace de noms , ajoutez un préfixe "\" pour le rendre global comme suit:
Sinon, il générera une erreur dite ReflectionClass dans un espace de noms non défini. Je n'avais pas le droit de faire un commentaire pour la réponse ci-dessus, donc j'écris ceci comme une réponse complémentaire.
la source
si vous aviez un dossier d'inclusion, vous pourriez exécuter une commande de script shell vers "grep" pour "class $ className" en faisant:
$filename = ``grep -r "class $className" $includesFolder/*\
et il retournerait dans quel fichier il se trouvait. A part ça, je ne pense pas qu'il y ait de magie fonction pour que PHP le fasse pour vous.la source