Skip to main content

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 de Illuminate/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 funcionan app()->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.
Para más información sobre los atributos de PHP y su integración en Laravel, consulta Atributos de PHP.

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étodo call() 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.
OPcache no cachea los resultados de Reflection. Si vas a inspeccionar muchas clases en bucle, plantéate una caché propia. Aun así, el propio contenedor de Laravel reutiliza las instancias de ReflectionClass dentro de la misma petición.

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.
Última modificación el 13 de julio de 2026