Come usare la Reflection in PHP

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.

Torna su