Ecco degli esercizi semplici con soluzione per praticare le basi delle classi e l’ereditarietà in PHP.
Esercizio 1
Creare una classe "Veicolo" con le proprietà "marca" e "anno" e i metodi "getMarca()" e "getAnno()" per ottenere le informazioni del veicolo. Creare una classe "Automobile" che eredita dalla classe "Veicolo" e ha una proprietà aggiuntiva "modello".
<?phpclass Veicolo { protected $marca; protected $anno;
public function __construct($marca, $anno) { $this->marca = $marca; $this->anno = $anno; }
public function getMarca() { return $this->marca; }
public function getAnno() { return $this->anno; }}
class Automobile extends Veicolo { private $modello;
public function __construct($marca, $anno, $modello) { parent::__construct($marca, $anno); $this->modello = $modello; }
public function getModello() { return $this->modello; }}
$auto = new Automobile("Fiat", 2020, "Panda");echo $auto->getMarca(); // Output: Fiatecho $auto->getAnno(); // Output: 2020echo $auto->getModello(); // Output: Panda?>
Esercizio 2
Creare una classe "Animale" con il metodo "verso()" che restituisce il verso dell'animale. Creare una classe "Cane" che eredita dalla classe "Animale" e ridefinisce il metodo "verso()" restituendo il verso del cane.
<?phpclass Animale { public function verso() { return "Verso generico"; }}
class Cane extends Animale { public function verso() { return "Bau bau!"; }}
$animale = new Animale();echo $animale->verso(); // Output: Verso generico
$cane = new Cane();echo $cane->verso(); // Output: Bau bau!?>
Esercizio 3
Creare una classe "Persona" con le proprietà "nome" e "cognome" e il metodo "presentati()" che restituisce una stringa di presentazione della persona. Creare una classe "Studente" che eredita dalla classe "Persona" e ha una proprietà aggiuntiva "matricola".
<?phpclass Persona { protected $nome; protected $cognome;
public function __construct($nome, $cognome) { $this->nome = $nome; $this->cognome = $cognome; }
public function presentati() { return "Sono {$this->nome} {$this->cognome}."; }}
class Studente extends Persona { private $matricola;
public function __construct($nome, $cognome, $matricola) { parent::__construct($nome, $cognome); $this->matricola = $matricola; }
public function presentati() { return parent::presentati() . " La mia matricola è {$this->matricola}."; }}
$persona = new Persona("Mario", "Rossi");echo $persona->presentati(); // Output: Sono Mario Rossi.
$studente = new Studente("Luca", "Verdi", "12345");echo $studente->presentati(); // Output: Sono Luca Verdi. La mia matricola è 12345.?>
Esercizio 4
Creare una classe "Forma" con il metodo "calcolaArea()" che restituisce l'area della forma. Creare una classe "Rettangolo" che eredita dalla classe "Forma" e ha le proprietà "base" e "altezza". Ridefinire il metodo "calcolaArea()" per calcolare l'area del rettangolo.
<?phpclass Forma { public function calcolaArea() { return 0; }}
class Rettangolo extends Forma { private $base; private $altezza;
public function __construct($base, $altezza) { $this->base = $base; $this->altezza = $altezza; }
public function calcolaArea() { return $this->base * $this->altezza; }}
$forma = new Forma();echo $forma->calcolaArea(); // Output: 0
$rettangolo = new Rettangolo(5, 3);echo $rettangolo->calcolaArea(); // Output: 15?>
Esercizio 5
Creare una classe "Veicolo" con il metodo "avvia()" che stampa "Veicolo avviato". Creare una classe "Automobile" che eredita dalla classe "Veicolo" e ridefinisce il metodo "avvia()" per stampare "Automobile avviata".
<?phpclass Veicolo { public function avvia() { echo "Veicolo avviato."; }}
class Automobile extends Veicolo { public function avvia() { echo "Automobile avviata."; }}
$veicolo = new Veicolo();$veicolo->avvia(); // Output: Veicolo avviato.
$automobile = new Automobile();$automobile->avvia(); // Output: Automobile avviata.?>
Esercizio 6
Creare una classe "Prodotto" con le proprietà "nome" e "prezzo" e il metodo "visualizza()" che stampa le informazioni del prodotto. Creare una classe "Libro" che eredita dalla classe "Prodotto" e ha una proprietà aggiuntiva "autore". Ridefinire il metodo "visualizza()" per visualizzare anche l'autore del libro.
<?phpclass Prodotto { protected $nome; protected $prezzo;
public function __construct($nome, $prezzo) { $this->nome = $nome; $this->prezzo = $prezzo; }
public function visualizza() { echo "Nome: {$this->nome}<br>"; echo "Prezzo: {$this->prezzo}€<br>"; }}
class Libro extends Prodotto { private $autore;
public function __construct($nome, $prezzo, $autore) { parent::__construct($nome, $prezzo); $this->autore = $autore; }
public function visualizza() { parent::visualizza(); echo "Autore: {$this->autore}<br>"; }}
$prodotto = new Prodotto("Prodotto generico", 10);$prodotto->visualizza(); // Output: Nome: Prodotto generico, Prezzo: 10€
$libro = new Libro("Titolo libro", 20, "Autore libro");$libro->visualizza(); // Output: Nome: Titolo libro, Prezzo: 20€, Autore: Autore libro?>
Esercizio 7
Creare una classe "Animale" con il metodo "mangia()" che stampa "L'animale sta mangiando". Creare una classe "Cane" che eredita dalla classe "Animale" e ridefinisce il metodo "mangia()" per stampare "Il cane sta mangiando".
<?phpclass Animale { public function mangia() { echo "L'animale sta mangiando."; }}
class Cane extends Animale { public function mangia() { echo "Il cane sta mangiando."; }}
$animale = new Animale();$animale->mangia(); // Output: L'animale sta mangiando.
$cane = new Cane();$cane->mangia(); // Output: Il cane sta mangiando.?>
Esercizio 8
Creare una classe "Figura" con il metodo "calcolaPerimetro()" che restituisce il perimetro della figura. Creare una classe "Quadrato" che eredita dalla classe "Figura" e ha la proprietà "lato". Ridefinire il metodo "calcolaPerimetro()" per calcolare il perimetro del quadrato.
<?phpclass Figura { public function calcolaPerimetro() { return 0; }}
class Quadrato extends Figura { private $lato;
public function __construct($lato) { $this->lato = $lato; }
public function calcolaPerimetro() { return 4 * $this->lato; }}
$figura = new Figura();echo $figura->calcolaPerimetro(); // Output: 0
$quadrato = new Quadrato(5);echo $quadrato->calcolaPerimetro(); // Output: 20?>
Esercizio 9
Creare una classe "Veicolo" con il metodo "accelera()" che stampa "Veicolo in accelerazione". Creare una classe "Automobile" che eredita dalla classe "Veicolo" e ridefinisce il metodo "accelera()" per stampare "Automobile in accelerazione". Creare una classe "Moto" che eredita dalla classe "Veicolo" e ridefinisce il metodo "accelera()" per stampare "Moto in accelerazione".
<?phpclass Veicolo { public function accelera() { echo "Veicolo in accelerazione."; }}
class Automobile extends Veicolo { public function accelera() { echo "Automobile in accelerazione."; }}
class Moto extends Veicolo { public function accelera() { echo "Moto in accelerazione."; }}
$veicolo = new Veicolo();$veicolo->accelera(); // Output: Veicolo in accelerazione.
$automobile = new Automobile();$automobile->accelera(); // Output: Automobile in accelerazione.
$moto = new Moto();$moto->accelera(); // Output: Moto in accelerazione.?>
Esercizio 10
Creare una classe "Persona" con le proprietà "nome" e "cognome" e il metodo "presentati()" che restituisce una stringa di presentazione della persona. Creare una classe "Studente" che eredita dalla classe "Persona" e ha una proprietà aggiuntiva "matricola". Ridefinire il metodo "presentati()" per visualizzare anche la matricola dello studente.
<?phpclass Persona { protected $nome; protected $cognome;
public function __construct($nome, $cognome) { $this->nome = $nome; $this->cognome = $cognome; }
public function presentati() { return "Sono {$this->nome} {$this->cognome}."; }}
class Studente extends Persona { private $matricola;
public function __construct($nome, $cognome, $matricola) { parent::__construct($nome, $cognome); $this->matricola = $matricola; }
public function presentati() { return parent::presentati() . " La mia matricola è {$this->matricola}."; }}
$persona = new Persona("Mario", "Rossi");echo $persona->presentati(); // Output: Sono Mario Rossi.
$studente = new Studente("Luca", "Verdi", "12345");echo $studente->presentati(); // Output: Sono Luca Verdi. La mia matricola è 12345.?>