La Reflection in PHP è un potente strumento che consente di ispezionare e manipolare classi, metodi, proprietà e altri elementi del codice a runtime. È particolarmente utile per il debugging, la generazione automatica di documentazione, la costruzione di framework o il testing.
Cos'è la Reflection?
Il namespace Reflection
di PHP fornisce una serie di classi che permettono di analizzare le strutture del codice. Ad esempio, è possibile ottenere informazioni sui metodi di una classe, accedere a proprietà private o invocare metodi dinamicamente.
Usare ReflectionClass
La classe ReflectionClass
consente di ispezionare una classe esistente. Vediamo un esempio pratico:
class Person {
private string $name;
private int $age;
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
public function greet(): string {
return "Ciao, sono " . $this->name;
}
}
$reflectClass = new ReflectionClass('Person');
echo "Nome classe: " . $reflectClass->getName() . PHP_EOL;
$methods = $reflectClass->getMethods();
foreach ($methods as $method) {
echo "Metodo: " . $method->getName() . PHP_EOL;
}
Accedere a proprietà private
È possibile accedere a proprietà private usando ReflectionProperty
:
$instance = new Person("Marco", 30);
$reflectClass = new ReflectionClass($instance);
$property = $reflectClass->getProperty('name');
$property->setAccessible(true);
$value = $property->getValue($instance);
echo "Nome privato: " . $value;
Invocare metodi dinamicamente
Con ReflectionMethod
si possono invocare metodi anche se il nome non è noto a priori:
$method = $reflectClass->getMethod('saluta');
echo $method->invoke($instance);
Conclusione
La Reflection in PHP è uno strumento potente ma va usato con cautela: può introdurre complessità e violare l’incapsulamento degli oggetti. Tuttavia, in ambiti come framework, test automatizzati o sistemi di introspezione, può fare davvero la differenza.