Esercizi Ereditarietà PHP
Codegrind Team•Jul 22 2023
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".
<?php
class 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: Fiat
echo $auto->getAnno(); // Output: 2020
echo $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.
<?php
class 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".
<?php
class 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.
<?php
class 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".
<?php
class 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.
<?php
class 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".
<?php
class 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.
<?php
class 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".
<?php
class 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.
<?php
class 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.
?>