Dedenie od triedy a implementácia rozhrania v OOP v PHP
Trieda môže dediť od inej triedy a zároveň implementovať nejaké rozhranie. Pozrime sa na praktický príklad.
Povedzme, že chceme vytvoriť triedu Programmer,
ktorá bude mať meno, plat a zoznam jazykov,
ktoré programátor ovláda.
Zatiaľ je náš popis triedy pomerne vágny:
áno, trieda bude mať meno, plat, jazyky -
ale aké metódy bude naša trieda obsahovať?
Poďme našu triedu opísať presnejšie pomocou
rozhrania iProgrammer:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Povedzme, že sme prehľadali už implementované
triedy a zistili sme, že už máme podobnú
triedu Employee. Neimplementuje všetky
metódy triedy Programmer, ale časť.
Tu je kód už existujúcej triedy:
<?php
class Employee
{
private $name;
private $salary;
public function __construct($name, $salary)
{
$this->name = $name;
$this->salary = $salary;
}
public function getName()
{
return $this->name;
}
public function getSalary()
{
return $this->salary;
}
}
?>
Je logické, aby naša nová trieda Programmer zdedila
časť potrebných metód od triedy
Employee (a zvyšok potom implementujeme
priamo v novej triede):
<?php
class Programmer extends Employee
{
}
?>
Zároveň vieme, že trieda Programmer
by mala implementovať rozhranie
iProgrammer:
<?php
class Programmer implements iProgrammer
{
}
?>
Spojme teraz dedenie od triedy
Employee a implementáciu rozhrania
iProgrammer:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Výsledkom bude, že naša trieda Programmer
zdedí od triedy Employee metódy
__construct, getName a getSalary,
zatiaľ čo metódy addLang a getLangs
budeme musieť implementovať:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// implementácia
}
public function getLangs()
{
// implementácia
}
}
?>
Rozhraniu iProgrammer je jedno,
či sú metódy pôvodné alebo zdedené
- dôležité je, aby boli všetky popísané metódy
implementované.
Skopírujte kód mojej triedy Employee
a kód rozhrania iProgrammer. Nekopírujte
môj náčrt triedy Programmer -
bez nahliadnutia do môjho kódu implementujte túto
triedu samostatne.