Hola Habr! Les presento la traducción del artículo "
Introducción a la API de reflexión de PHP " de
Mustafa Magdi .
Cómo analizar la estructura de datos en PHP

Entrada
Cuando comencé a programar en PHP, no sabía sobre las capacidades de la
API Reflection . La razón principal es que no necesitaba diseñar mis clases simples, módulos o incluso paquetes. Luego descubrí que esto juega un papel importante en muchas áreas. En el artículo, consideraremos la
API Reflection en los siguientes puntos:
- ¿Qué es la API de Reflection ?
- Instalación y configuración
- Uso
- Conclusión
- Recomendaciones
1. ¿Qué es la API Reflection?
En informática, reflexión o reflexión (el holónimo de introspección, reflexión en inglés) significa un proceso durante el cual un programa puede rastrear y modificar su propia estructura y comportamiento en tiempo de ejecución. - Wikipedia .
¿Qué significa la capacidad de detenerse y mirar dentro de su código (
ingeniería inversa )? Veamos el siguiente fragmento de código:
class Profile { public function getUserName(): string { return 'Foo'; } }
La clase de
perfil es un cuadro negro. Usando la
API de Reflection puedes leer lo que hay dentro:
Por lo tanto,
ReflectionClass actúa como analista de nuestra clase
Profile , y esta es la idea principal de la
API Reflection .
PHP te da la clave de cualquier casilla bloqueada, así que tenemos las claves
para lo siguiente:
ReflectionClass : informa información de la clase.
ReflectionFunction : informa la información de la función.
ReflectionParameter : recupera información sobre los parámetros de una función o método.
ReflectionClassConstant : informa información constante de la clase.
Puedes estudiar la lista completa en
php.net2. Instalación y configuración
Para usar las clases de
Reflection API , no es necesario instalar ni configurar nada, ya que son parte del núcleo de PHP.
3. Ejemplos de uso
Los siguientes son algunos ejemplos de cómo podemos usar la
API de Reflection :
Ejemplo 1:Obtenga la clase principal para una clase específica:
Ejemplo 2Obtenga la documentación para el método
getUserName()
:
$method = new ReflectionMethod('Profile', 'getUserName'); var_dump($method->getDocComment()); => output: string(33) "/** * @return string */"
Ejemplo 3Se puede usar como
instanceOf
e
is_a()
para validar objetos:
$class = new ReflectionClass('Profile'); $obj = new Profile(); var_dump($class->isInstance($obj));
Ejemplo 4En algunas situaciones, puede estar atascado con las pruebas unitarias y preguntarse: "¿Cómo puedo probar una función privada?"
No te preocupes, aquí está el truco:
Los ejemplos anteriores son bastante simples, pero hay otros ejemplos en los que puede ver cómo
se usa más ampliamente la
API de Reflection :
- Generador de documentación API : el paquete lavarel-apidoc-generator utiliza ampliamente ReflectionClass y ReflrectionMethod para obtener y posteriormente procesar información sobre bloques de documentación para clases y métodos, y para diseñar estos bloques de código.
- Contenedor de inyección de dependencia : puede consultar el tema completo aquí
4. Conclusión
PHP proporciona una
API Reflection completa que lo ayuda a llegar fácilmente a diferentes áreas de las estructuras de OOP.
5. Referencias
Del traductor:También puede ver un ejemplo del uso de la API Reflection en el paquete Codeception en la clase Stub .
Esta clase a través de la reflexión ayuda a sumergir métodos y propiedades en pruebas unitarias.
Debe agregarse que la API Reflection funciona bastante lento, por lo que no debe involucrarse demasiado. Se recomienda su uso en pruebas o durante la depuración, pero si puede prescindir de ella, es mejor hacerlo. Y categóricamente no se recomienda su uso en el código de trabajo del proyecto, ya que Tampoco es seguro.