¿Hay alguna reflexión / introspección / magia en PHP que le permita encontrar el archivo PHP donde se definió una clase (o función) en particular?
En otras palabras, tengo el nombre de una clase PHP o un objeto instanciado. Quiero pasar esto a algo (función, clase de reflexión, etc.) que devolvería la ruta del sistema de archivos donde se definió la clase.
/path/to/class/definition.php
Me doy cuenta de que podría usar ( get_included_files())
para obtener una lista de todos los archivos que se han incluido hasta ahora y luego analizarlos todos manualmente, pero eso es mucho acceso al sistema de archivos para un solo intento.
También me doy cuenta de que podría escribir código adicional en nuestro mecanismo de carga automática que almacena esta información en algún lugar. Sin embargo, modificar la __autoload existente está fuera de los límites en la situación que tengo en mente.
Sería interesante escuchar sobre extensiones que pueden hacer esto, pero en última instancia, me gustaría algo que se pueda ejecutar en una instalación "estándar".
fuente
Respuestas:
Tratar
ReflectionClass
Ejemplo:
Esto volverá
false
cuando no se pueda encontrar el nombre del archivo, por ejemplo, en clases nativas.fuente
Para ReflectionClass en un archivo con espacio de nombres , agregue un prefijo "\" para hacerlo global de la siguiente manera:
De lo contrario, generará un error dicho ReflectionClass en un espacio de nombres no definido. No tenía derecho a hacer comentarios sobre la respuesta anterior, así que escribo esto como una respuesta complementaria.
fuente
si tuviera una carpeta de inclusión, podría ejecutar un comando de script de shell para "grep" para "class $ className" haciendo:
$filename = ``grep -r "class $className" $includesFolder/*\
y devolvería en qué archivo estaba. Aparte de eso, no creo que haya ninguna magia función para que PHP lo haga por ti.fuente