ponieważ w interfejsie tylko deklarujesz jakie metody ma zawierać klasa go implementująca, jeśli zrobisz klasę nadrzędną może już mieć ciało. Użyjmy przykładu:
<?php
class figura{
private $pole;
public function pobierzPole(){
return $this->pole;
}
public abstract function obliczPole(){}
}
class kwadrat extends figura{
private $dlugosc_boku;
function __construct($bok){
$this->dlugosc_boku = $bok;
}
public function obliczPole(){
$pole = pow($this->dlugosc_boku,2);
}
}
class trojkatRownoramienny extends figura{
private $dlugosc_podstawy;
private $wysokosc;
function __construct($podst, $wys){
$this->dlugosc_podstawy = $podst;
$this->wysokosc = $wys;
}
public function obliczPole(){
$pole = $this->dlugosc_podstawy * $this->wysokosc / 2;
}
}
$kw = new kwadrat(2);
$kw->obliczPole();
$tr = new trojkatRownoramienny(4,4);
$tr->obliczPole();
?>
teraz pomysl ze chcesz zrobic tak, aby przy kazdym wyswietleniu pola zostalo wyswietlone "huura pole to: ", normalnie musialbyś zmieniać wszystkie klasy pochodne, a tak robisz to w jednym miejscu:
<?php
class figura{
private $pole;
public function pobierzPole(){
return "Huura, pole to: ".$this->pole;
}
public abstract function obliczPole(){}
}
?>
jeśli chodzi o interfejsy to jedyne co mają zastosowanie to określenie jakie metody muszą w sobie klasy pochodne mieć, czyli w tym przypadku:
<?php
interface figura{
abstract function pobierzPole();
abstract function obliczPole();
}
?>
i tak resztę trza by było robić w klasach, które korzystają z interface