Olá Habr! Apresento a você a tradução do artigo "
Introdução à API de reflexão do PHP ", de
Mustafa Magdi .
Como analisar a estrutura de dados em PHP

Entrada
Quando comecei a programar em PHP, não sabia sobre os recursos da
API de reflexão . O principal motivo é que não precisei projetar minhas classes, módulos ou pacotes simples. Então eu descobri que isso desempenha um papel importante em muitas áreas. No artigo, consideraremos a
API de reflexão nos seguintes pontos:
- O que é a API de reflexão ?
- Instalação e configuração
- Use
- Conclusão
- Recomendações
1. O que é a API de reflexão
Em ciência da computação, reflexão ou reflexão (o holônimo de introspecção, reflexão em inglês) significa um processo durante o qual um programa pode rastrear e modificar sua própria estrutura e comportamento em tempo de execução. - Wikipedia .
O que significa a capacidade de parar e olhar dentro do seu código (
engenharia reversa )? Vejamos o seguinte trecho de código:
class Profile { public function getUserName(): string { return 'Foo'; } }
A classe
Profile é uma caixa preta. Usando a
API do
Reflection, você pode ler o que há dentro:
Assim, o
ReflectionClass atua como analista da nossa classe
Profile , e essa é a ideia principal da
API de reflexão .
O PHP fornece a chave para qualquer caixa bloqueada, por isso temos as chaves
para o seguinte:
ReflectionClass : relata informações da classe.
ReflectionFunction : informa informações da função.
ReflectionParameter : Recupera informações sobre os parâmetros de uma função ou método.
ReflectionClassConstant : relata informações constantes da classe.
Você pode estudar a lista completa em
php.net2. Instalação e configuração
Para usar as classes da
API de reflexão , não há necessidade de instalar ou configurar nada, pois elas fazem parte do núcleo do PHP.
3. Exemplos de uso
A seguir, alguns exemplos de como podemos usar a
API de reflexão :
Exemplo 1:Obtenha a classe pai para uma classe específica:
Exemplo 2:Obtenha a documentação para o método
getUserName()
:
$method = new ReflectionMethod('Profile', 'getUserName'); var_dump($method->getDocComment()); => output: string(33) "/** * @return string */"
Exemplo 3:Pode ser usado como
instanceOf
e
is_a()
para validar objetos:
$class = new ReflectionClass('Profile'); $obj = new Profile(); var_dump($class->isInstance($obj));
Exemplo 4:Em algumas situações, você pode ficar preso no teste de unidade e se perguntar: "Como posso testar uma função privada?!"
Não se preocupe, aqui está o truque:
Os exemplos anteriores são bem simples, mas há outros exemplos em que você pode ver como a
API do
Reflection é usada mais amplamente:
- Gerador de documentação da API : o pacote lavarel-apidoc-generator faz uso extensivo de ReflectionClass e ReflrectionMethod para obter e posteriormente processar informações sobre blocos de documentação para classes e métodos, e para estilizar esses blocos de código.
- Container de injeção de dependência : você pode conferir o tópico inteiro aqui
4. Conclusão
O PHP fornece uma
API de reflexão completa que ajuda você a alcançar facilmente diferentes áreas das estruturas OOP.
5. Referências
Do tradutor:Você também pode ver um exemplo do uso da API de reflexão no pacote Codeception na classe Stub .
Esta classe através da reflexão ajuda a mergulhar métodos e propriedades em testes de unidade.
Deve-se acrescentar que a API do Reflection funciona muito lentamente, portanto você não deve se envolver demais. É recomendável usar em testes ou durante a depuração, mas se você puder ficar sem ele, é melhor fazê-lo. E não é recomendado categoricamente para uso no código de trabalho do projeto, como Também não é seguro.