Skip to main content

Cos’è la PHP Reflection API

La PHP Reflection API è una funzionalità integrata di PHP che permette di ottenere e ispezionare a runtime le meta-informazioni di classi, metodi, proprietà, funzioni e parametri. Puoi scoprire quali argomenti riceve un costruttore o quali attributi sono applicati a un metodo, senza modificare il codice sorgente. Laravel usa massicciamente la Reflection API dentro Illuminate/Container/Container.php per realizzare la risoluzione automatica del DI container, la lettura degli attributi PHP, la method injection e altro ancora.

Classi principali

ReflectionClass — informazioni sulla classe

ReflectionParameter — ispezionare gli argomenti del costruttore

Container di Laravel e Reflection API

L’IoC container di Laravel realizza la constructor injection (risoluzione automatica delle dipendenze) usando la Reflection API. Vediamo il meccanismo alla base di app()->make(SomeClass::class) e della dependency injection.

Metodo build() del container (semplificato)

Il metodo build() reale di Container.php è più o meno così.
Util::getParameterClassName() è una utility che estrae la stringa del tipo dal risultato di $parameter->getType(). Fa da wrapper conveniente al ReflectionNamedType restituito da ReflectionParameter::getType().

Lettura degli attributi PHP

Da PHP 8.0, tramite la Reflection API puoi ottenere gli attributi applicati a classi, metodi e proprietà. Laravel usa questo meccanismo per gestire gli attributi delle code e di Eloquent.
Per gli attributi PHP e la loro integrazione in Laravel, consulta anche Attributi PHP.

Pattern base per leggere gli attributi

Come Laravel legge gli attributi Queue (semplificato)

Leggere gli attributi dei metodi

Utilizzi nello sviluppo di pacchetti

Verificare le interfacce implementate da una classe

In un pacchetto puoi verificare dinamicamente se una classe implementa una specifica interfaccia.

Ottenere metadati — registrazione automatica delle rotte via attributi

Pattern per raccogliere e registrare rotte in modo automatico combinando attributi e Reflection.

Chiamata dinamica di metodo — method injection

Il metodo call() di Laravel risolve gli argomenti automaticamente con la Reflection. Esempio di come implementare lo stesso meccanismo in un pacchetto.

Raccogliere i valori di default delle proprietà

Pattern per ottenere via Reflection i valori di default di una classe di configurazione.

Considerazioni sulle performance

La Reflection API riparsa ogni volta le info di classe, quindi ha un costo. Nella produzione è best practice mettere in cache i risultati.
L’OPcache di PHP non memorizza in cache i risultati della Reflection. Se ispezioni molte classi in loop, valuta una cache tua. Nota però che il container di Laravel già riutilizza le istanze di ReflectionClass all’interno della stessa richiesta.

Prossimi passi

Attributi PHP

Approfondisci gli attributi PHP letti tramite ReflectionClass::getAttributes().

Sviluppo di pacchetti

Impara a sviluppare pacchetti Laravel sfruttando la Reflection API.
Ultima modifica il 13 luglio 2026