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();