Autoload e namespace
Il problema dei file
Sezione intitolata “Il problema dei file”In un progetto piccolo puoi usare require per includere i file a mano. In un progetto più grande diventa scomodo.
L’autoload carica le classi quando servono, senza dover scrivere require per ogni file.
Namespace
Sezione intitolata “Namespace”Un namespace è uno spazio dei nomi. Serve a evitare conflitti tra classi con lo stesso nome.
<?phpnamespace App\Model;
class Prodotto {}Il nome completo di questa classe è App\Model\Prodotto.
Per usare una classe con namespace puoi importarla con use.
<?phpuse App\Model\Prodotto;
$prodotto = new Prodotto();Senza use dovresti scrivere il nome completo.
Struttura delle cartelle
Sezione intitolata “Struttura delle cartelle”Una struttura comune è:
progetto/ src/ Model/ Prodotto.php vendor/ composer.jsonIl file Prodotto.php contiene la classe App\Model\Prodotto.
Autoload con Composer
Sezione intitolata “Autoload con Composer”Nel composer.json puoi configurare l’autoload:
{ "autoload": { "psr-4": { "App\\": "src/" } }}Poi esegui:
composer dump-autoloadNel codice principale carichi l’autoload:
<?phprequire __DIR__ . '/vendor/autoload.php';Nomi coerenti
Sezione intitolata “Nomi coerenti”Usa nomi di classi chiari e una cartella coerente con il namespace. Così il progetto è più facile da navigare.
Un file, una classe principale
Sezione intitolata “Un file, una classe principale”Una convenzione semplice è mettere una classe principale per file.
<?phpnamespace App\Model;
class Prodotto {}Questo file potrebbe chiamarsi src/Model/Prodotto.php. Il percorso rispecchia il namespace.
Perché serve dump-autoload
Sezione intitolata “Perché serve dump-autoload”Quando cambi la configurazione dell’autoload in composer.json, Composer deve rigenerare le informazioni necessarie.
composer dump-autoloadSe aggiungi una nuova classe seguendo la struttura già configurata, spesso non serve fare altro. Se cambi la mappa dei namespace, esegui questo comando.
Errore comune: namespace e cartella incoerenti
Sezione intitolata “Errore comune: namespace e cartella incoerenti”Se dichiari:
<?phpnamespace App\Model;ma metti il file in una cartella non collegata ad App\\, Composer potrebbe non trovarlo. Quando una classe non viene caricata, controlla il namespace, il nome della classe, il percorso del file e la configurazione psr-4.