Ereditarietà, interfacce e trait
Prima la soluzione semplice
Sezione intitolata “Prima la soluzione semplice”Ereditarietà, interfacce e trait sono strumenti utili, ma non servono in ogni programma. Prima prova con classi piccole e metodi chiari. Usali quando risolvono un problema reale.
Ereditarietà con extends
Sezione intitolata “Ereditarietà con extends”L’ereditarietà permette a una classe di partire da un’altra classe.
<?phpclass Utente { public function saluta(): string { return "Ciao"; }}
class Admin extends Utente { public function pannello(): string { return "Area amministrazione"; }}
$admin = new Admin();echo $admin->saluta();Admin eredita da Utente il metodo saluta.
Interfacce con implements
Sezione intitolata “Interfacce con implements”Un’interfaccia descrive i metodi che una classe deve avere.
<?phpinterface Notificabile { public function invia(string $messaggio): void;}
class Email implements Notificabile { public function invia(string $messaggio): void { echo "Email: $messaggio"; }}L’interfaccia non spiega come eseguire il lavoro: stabilisce il contratto.
Un trait permette di riusare metodi in più classi.
<?phptrait LoggaAzioni { public function log(string $messaggio): void { echo "Log: $messaggio"; }}
class Ordine { use LoggaAzioni;}Quando usarli
Sezione intitolata “Quando usarli”Usa extends quando una classe è davvero una versione più specifica di un’altra. Usa un’interfaccia quando classi diverse devono rispettare lo stesso contratto. Usa un trait per condividere piccoli comportamenti, senza costruire una gerarchia complicata.
Un esempio di interfaccia con più classi
Sezione intitolata “Un esempio di interfaccia con più classi”Il valore di un’interfaccia si vede quando classi diverse possono essere usate nello stesso modo.
<?phpinterface Pagabile { public function paga(float $importo): void;}
class CartaCredito implements Pagabile { public function paga(float $importo): void { echo "Pagamento con carta: $importo"; }}
class Bonifico implements Pagabile { public function paga(float $importo): void { echo "Pagamento con bonifico: $importo"; }}Entrambe le classi garantiscono di avere un metodo paga.
Quando evitare l’ereditarietà
Sezione intitolata “Quando evitare l’ereditarietà”Non usare extends solo per riusare due righe di codice. L’ereditarietà crea un legame forte tra classi. Se il legame non rappresenta davvero un rapporto “è un tipo di”, una funzione, una composizione o un trait piccolo possono essere più semplici.
Riepilogo
Sezione intitolata “Riepilogo”Questi strumenti servono a organizzare progetti più grandi. Se classi semplici e metodi chiari risolvono il problema, resta su quella strada. La semplicità è una scelta tecnica, non una mancanza.