Salta ai contenuti
Manuale LogoManuale Logo

Autoload e namespace

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.

Un namespace è uno spazio dei nomi. Serve a evitare conflitti tra classi con lo stesso nome.

<?php
namespace App\Model;
class Prodotto {
}

Il nome completo di questa classe è App\Model\Prodotto.

Per usare una classe con namespace puoi importarla con use.

<?php
use App\Model\Prodotto;
$prodotto = new Prodotto();

Senza use dovresti scrivere il nome completo.

Una struttura comune è:

progetto/
src/
Model/
Prodotto.php
vendor/
composer.json

Il file Prodotto.php contiene la classe App\Model\Prodotto.

Nel composer.json puoi configurare l’autoload:

{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}

Poi esegui:

Terminal window
composer dump-autoload

Nel codice principale carichi l’autoload:

<?php
require __DIR__ . '/vendor/autoload.php';

Usa nomi di classi chiari e una cartella coerente con il namespace. Così il progetto è più facile da navigare.

Una convenzione semplice è mettere una classe principale per file.

<?php
namespace App\Model;
class Prodotto {
}

Questo file potrebbe chiamarsi src/Model/Prodotto.php. Il percorso rispecchia il namespace.

Quando cambi la configurazione dell’autoload in composer.json, Composer deve rigenerare le informazioni necessarie.

Terminal window
composer dump-autoload

Se aggiungi una nuova classe seguendo la struttura già configurata, spesso non serve fare altro. Se cambi la mappa dei namespace, esegui questo comando.

Se dichiari:

<?php
namespace 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.