Ereditarietà di base
Fa parte della sezione Programmazione orientata agli oggetti del percorso PHP di Coddy. Lezione 21 di 91.
L’ereditarietà consente a una classe di acquisire proprietà e metodi da un’altra classe. Invece di riscrivere lo stesso codice, puoi creare una classe base con funzionalità condivise e fare in modo che altre classi ereditino da essa.
La classe da cui si eredita è chiamata classe genitore (o classe base), mentre la classe che eredita è chiamata classe figlia. Usi la parola chiave extends per stabilire questa relazione:
<?php
class Animal {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function speak() {
return "$this->name makes a sound";
}
}
class Dog extends Animal {
public function fetch() {
return "$this->name fetches the ball";
}
}
$dog = new Dog("Buddy");
echo $dog->speak() . "\n";
echo $dog->fetch();
Output:
Buddy makes a sound
Buddy fetches the ballLa classe Dog ha automaticamente accesso alla proprietà $name, al costruttore e al metodo speak() di Animal. Definisce anche un proprio metodo fetch(), che solo i cani hanno.
Questo crea una gerarchia chiara: ogni cane è un animale, quindi ha senso che Dog erediti da Animal. La classe figlia può usare tutto ciò che proviene dalla classe genitore, aggiungendo al contempo il proprio comportamento specializzato.
Punto chiave: L'ereditarietà favorisce il riutilizzo del codice e stabilisce relazioni logiche tra le classi. La classe figlia eredita tutti i membri pubblici e protetti dalla classe genitore, riducendo le duplicazioni e rendendo il codice più facile da mantenere.
Sfida
FacileCostruiamo un sistema di gerarchia dei veicoli che mostri come l'ereditarietà consenta alle classi figlie di condividere le funzionalità di una classe genitore e di aggiungere comportamenti specifici.
Organizzerai il codice in tre file:
Vehicle.php: definisci una classeVehicleche funge da genitore per tutti i veicoli. Dovrebbe avere una proprietà pubblica$brande un costruttore che accetta e imposta la marca. Includi un metodostart()che restituisce"[brand] is starting"e un metodostop()che restituisce"[brand] is stopping".Motorcycle.php: definisci una classeMotorcycleche estendeVehicle. Includi il file Vehicle all'inizio. La classe Motorcycle non ha bisogno di un proprio costruttore, poiché erediterà quello della classe genitore. Aggiungi un metodowheelie()che restituisce"[brand] is doing a wheelie!". Questo è un comportamento esclusivo delle motociclette.main.php: includi il file Motorcycle (che include già Vehicle). Riceverai un input: la marca della motocicletta. Crea un oggettoMotorcyclecon questa marca. Stampa il risultato della chiamata astart(), poi awheelie()e infine astop(), ciascuno su una riga distinta.
Nota come la classe Motorcycle erediti automaticamente da Vehicle la proprietà $brand, il costruttore e i metodi start() e stop(). La classe figlia deve definire solo ciò che la rende unica, in questo caso la possibilità di impennare. Questa è la potenza dell'ereditarietà: scrivere una volta le funzionalità comuni nella classe genitore e lasciare che le classi figlie le riutilizzino aggiungendo le proprie specializzazioni.
Provalo tu
<?php
// Includi la classe Motorcycle (che include già Vehicle)
require_once 'Motorcycle.php';
// Leggi l'input
$brand = trim(fgets(STDIN));
// TODO: Crea un oggetto Motorcycle con la marca
// TODO: Stampa il risultato di start()
// TODO: Stampa il risultato di wheelie()
// TODO: Stampa il risultato di stop()
?>Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave $thisMetodiProprietàCostruttore (__construct)Distruttore (__destruct)Riepilogo - Calcolatrice semplice4Ereditarietà
Ereditarietà di baseLa parola chiave parent::Sovrascrittura dei metodiLa parola chiave finalClassi astratteRiepilogo - Gerarchia dei dipendenti7Incapsulamento
Pubblico, Protetto, PrivatoApprofondimento sui modificatori di accessoGetter e SetterOccultamento delle informazioniPromozione dei parametri del costruttore (8.0)Riepilogo - Sistema di gestione dei registri degli studenti10Concetti avanzati di programmazione a oggetti
Composizione vs ereditarietàDependency InjectionClassi anonimeEnumerazioni (PHP 8.1)Fibers (PHP 8.1)Approfondimento sulla clonazione degli oggettiGeneratori e iteratori13Modelli di progettazione, parte 2
Modello CommandModello AdapterModello DecoratorModello Template MethodModello StateModello CompositeModello Repository2Namespace e autoloading
Introduzione ai namespaceLa keyword useStandard di autoloading PSR-4Autoloader di ComposerRiepilogo - Progetto organizzato5Interfacce e contratti
Introduzione alle interfacceImplementare le interfacceImplementare più interfacceInterfaccia vs classe astrattaType hinting con le interfacceRiepilogo - Calcolatore di forme8Metodi magici
Introduzione ai metodi magici__toString e __debugInfo__get, __set, __isset, __unset__call e __callStatic__clone e clonazione degli oggetti__serialize e __unserializeRiepilogo - Collezione personalizzata11Sistema dei tipi e gestione degli errori
Dichiarazioni di tipoTipi nullableTipi unione e intersezioneClassi di eccezioneGerarchia di eccezioni personalizzataTry, Catch, FinallyRiepilogo - Validatore di moduli14Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Proprietà delle classi
Proprietà di istanza e staticheCostanti nelle classiMetodi e proprietà staticiProprietà private e protectedProprietà readonly (PHP 8.1)Riepilogo - Gestore di conti bancari6Polimorfismo
Ridefinizione dei metodi, ripresaPolimorfismo tramite interfacceSuggerimenti sui tipi e tipi UnionBinding statico tardivoRiepilogo - Processore di pagamenti9Tratti
Introduzione ai trattiUtilizzare più trattiRisoluzione dei conflitti tra trattiMetodi astratti nei trattiTratti vs ereditarietà12Design pattern - Parte 1
Introduzione ai design patternPattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore PHP online