PHP: le basi dell'ereditarietà nella programmazione orientata agli oggetti

PHP: le basi dell'ereditarietà nella programmazione orientata agli oggetti

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;

Torna su