🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Esercizi Ereditarietà PHP

Codegrind TeamJul 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.
?>