Introduzione all'ereditarietà delle classi in PHP

In questo articolo illustreremo le basi dell'ereditarietà nella programmazione OO in PHP.

PHP di Gabriele Romanato

In questo articolo illustreremo le basi dell'ereditarietà nella programmazione OO in PHP.

Partiamo da questa classe base:


class Bicycle {
    public $cadence;
    public $gear;
    public $speed;

    public function __construct($startCadence, $startSpeed, $startGear) {
        $this->cadence = $startCadence;
        $this->gear = $startGear;
        $this->speed = $startSpeed;
    }

    public function setCadence($value) {
        $this->cadence = $value;
    }

    public function setGear($value) {
        $this->gear = $value;
    }

    public function applyBrake($decrement) {
        $this->speed -= $decrement;
    }

    public function speedUp($increment) {
        $this->speed += $increment;
    }
}

La classe ha tre proprietà e quattro metodi, di cui due sono dei canonici setter e gli altri due incrementano e decrementano il valore di una proprietà.

Questa classe fungerà da genitrice per la classe figlia, che ne erediterà le proprietà e i metodi. Possiamo aggiungere altri metodi e proprietà alla classe figlia in modo da personalizzarne la struttura.

A differenza di Java, PHP non supporta i costruttori multipli per l'overloading (può esserci un solo __construct()) ma offre la possibilità di invocare il costruttore della classe genitrice tramite la parola chiave parent (in Java è super). Questa caratteristica risulta utile quando si vogliono impostare i valori per le proprietà ereditate.

PHP, come Java, utilizza la parola chiave extends per l'ereditarietà:


class MountainBike extends Bicycle {
    public $seatHeight;

    public function __construct($startHeight, $startCadence, $startSpeed, $startGear) {
        parent::__construct($startCadence, $startGear, $startSpeed);
        $this->seatHeight = $startHeight;
    }

    public function setHeight($value) {
        $this->seatHeight = $value;
    }
}

La classe figlia inizializza i valori delle proprietà della classe genitrice nel suo costruttore invocando il costruttore della classe base. In più aggiunge una sua proprietà specifica con il relativo metodo setter.

Esempio:


$mountainBike = new MountainBike(80, 20, 20, 20);
echo 'Accelerate!' . '<br>';
$mountainBike->speedUp(20); // Ora MountainBike::speed è 40
echo $mountainBike->speed . '<br>';
echo 'Decelerate!' . '<br>';
$mountainBike->applyBrake(10); // Ora MountainBike::speed è 30
echo $mountainBike->speed;

Commenti