Dziedziczenie w php z interfejsem

Dzięki dziedziczeniu możemy stworzyć ramy klasy głownej, które będą wykorzystywane przez klasy dziedziczące. W tym przykładzie możemy stworzyć klasę główną Wielokat, która będzie definiować szerokość i wysokość figur, a także wyświetlać te dane. W klasach dziedziczących dodamy funkcje pole, które będą się różnić w zależności od figury.

class Wielokat{
    private $szerokosc;
    private $wysokosc;
    function __construct(float $sz, float $w){
        $this->szerokosc = $sz;
        $this->wysokosc = $w;
    }
    public function pobierzSzerokosc(){
        return $this->szerokosc;
    }
    public function pobierzWysokosc(){
        return $this->wysokosc;
    }
}

class Prostokat extends Wielokat{
    public function pole(){
        return $this->pobierzSzerokosc() * $this->pobierzWysokosc(); 
    }
}

class Trojkat extends Wielokat{
    public function pole(){
        return $this->pobierzSzerokosc() * $this->pobierzWysokosc() / 2; 
    }
}

$fig = new Prostokat(4,6);
echo $fig->pole();

$troj = new Trojkat(6,4);
echo $troj->pole();

Jeżeli chcemy mieć pewność, że wszystkie klasy będą zawierać metodę pole, możemy zaimplementować interfejs. Wewnątrz interfejsu podaje się tylko deklarację funkcji, a następnie dodaje się odpowiednią instrukcję implements do każdej klasy, np:

class Wielokat{
    private $szerokosc;
    private $wysokosc;
    function __construct(float $sz, float $w){
        $this->szerokosc = $sz;
        $this->wysokosc = $w;
    }
    public function pobierzSzerokosc(){
        return $this->szerokosc;
    }
    public function pobierzWysokosc(){
        return $this->wysokosc;
    }
}
interface IKsztalt{
    public function pole();
}

class Prostokat extends Wielokat implements IKsztalt{
    public function pole(){
        return $this->pobierzSzerokosc() * $this->pobierzWysokosc(); 
    }
}

class Trojkat extends Wielokat implements IKsztalt{
    public function pole(){
        return $this->pobierzSzerokosc() * $this->pobierzWysokosc() / 2; 
    }
}

$fig = new Prostokat(4,6);
echo $fig->pole();

$troj = new Trojkat(6,4);
echo $troj->pole();
Przewiń do góry