Qué es la Reflection API de PHP
La Reflection API de PHP es una funcionalidad nativa que permite obtener e inspeccionar en tiempo de ejecución la metainformación de clases, métodos, propiedades, funciones y parámetros. Puedes saber qué argumentos recibe el constructor de una clase o qué atributos tiene un método sin modificar el código fuente. Laravel utiliza intensamente la Reflection API dentro deIlluminate/Container/Container.php para implementar la resolución automática del contenedor DI, la lectura de atributos de PHP, la inyección de dependencias por método, etc.
Clases principales
ReflectionClass — obtener información de la clase
ReflectionParameter — inspeccionar los argumentos del constructor
El contenedor de Laravel y la Reflection API
El contenedor IoC de Laravel usa la Reflection API para lograr la inyección por constructor (resolución automática de dependencias). Comprendamos cómo funcionanapp()->make(SomeClass::class) y la inyección de dependencias.
Método build() del contenedor (versión simplificada)
El método build() real de Container.php es aproximadamente así:
Util::getParameterClassName() es una utilidad que extrae el nombre del tipo como cadena a partir del resultado de $parameter->getType(). Envuelve el ReflectionNamedType de ReflectionParameter::getType() para hacerlo más fácil de usar.Lectura de atributos de PHP
Desde PHP 8.0, la Reflection API permite obtener los atributos aplicados a clases, métodos y propiedades. Laravel usa este mecanismo para procesar sus atributos de cola y de Eloquent.Patrón básico de lectura de atributos
Cómo Laravel lee el atributo Queue (versión simplificada)
Leer atributos de un método
Ejemplos en el desarrollo de paquetes
Comprobar las interfaces que implementa una clase
En un paquete puedes verificar dinámicamente si una clase implementa una interfaz concreta.Obtener metadatos — registrar rutas automáticamente con atributos
Patrón que combina atributos con Reflection para recolectar rutas de forma automática.Invocación dinámica de métodos — method injection
El métodocall() de Laravel resuelve los argumentos automáticamente mediante Reflection. Ejemplo para implementar el mismo mecanismo en un paquete.
Recoger los valores por defecto de las propiedades
Patrón para obtener con Reflection los valores por defecto de una clase de configuración.Consideraciones de rendimiento
La Reflection API tiene coste porque parsea la información de la clase cada vez. En código de producción es buena práctica cachear los resultados.Próximos pasos
Atributos de PHP
Detalles de los atributos de PHP que se leen con
ReflectionClass::getAttributes().Desarrollo de paquetes
Cómo desarrollar paquetes Laravel aprovechando la Reflection API.