L’autoloading è una funzionalità che permette di caricare automaticamente classi e file all’interno del progetto PHP, eliminando la necessità di includere manualmente i file con istruzioni include o require. Composer fornisce un potente sistema di autoloading che aderisce agli standard PSR PHP. In questa sezione, esploreremo come configurare l’autoloading con Composer.
Standard PSR
Gli standard PSR (PHP Standard Recommendation) sono una serie di raccomandazioni che definiscono come scrivere codice PHP in modo interoperabile. Composer supporta vari standard PSR per l’autoloading, tra cui PSR-4, standard di autoloading che permette di definire uno schema di nomi di classi flessibile e intuitivo.
Come configurare l’autoloading con Composer
Per configurare l’autoloading nel progetto, è necessario aggiungere una sezione autoload al file composer.json. Ecco come fare:
- PSR-4: per configurare un autoloading PSR-4, è necessario definire uno spazio dei nomi e il percorso della directory dove sono situati i file delle classi. Ad esempio:
"autoload": { "psr-4": { "App\\": "src/" } }
- Classmap: se il progetto non segue gli standard PSR, si può utilizzare l’autoloading basato su classmap, che mappa ogni classe a un file specifico. Ad esempio:
"autoload": { "classmap": [ "src/", "lib/" ] }
Come generare l’autoloader con Composer
Dopo aver configurato l’autoloading nel file composer.json, per generalo è sufficiente eseguire il comando:
composer dump-autoload
Tale comando genera il file vendor/autoload.php da includere all’interno degli script PHP per abilitare l’autoloading. In ambiente di produzione, è consigliabile ottimizzare l’autoloader per migliorare le prestazioni tramite il comando:
composer dump-autoload --optimize
Questo comando genera un autoloader più performante che permette di ridurre il tempo di caricamento delle classi.
In un progetto Symfony, l’autoloader di Composer è integrato nativamente, facilitando il caricamento automatico delle classi e dei file necessari. Nel file “public/index.php” è presente, infatti, una riga che include l’autolader:
require __DIR__ . '/vendor/autoload.php';