Dědičnost třídy a implementace rozhraní v OOP v PHP
Třída může dědit od jiné třídy a zároveň implementovat nějaké rozhraní. Podívejme se na praktický příklad.
Řekněme, že chceme vytvořit třídu Programmer,
která bude mít jméno, plat a seznam jazyků,
které programátor ovládá.
Zatím je náš popis třídy velmi vágní:
ano, třída bude mít jméno, plat, jazyky -
ale jaké metody bude naše třída mít?
Pojďme naši třídu popsat přesněji pomocí
rozhraní iProgrammer:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Řekněme, že jsme prohledali naše již implementované
třídy a ukázalo se, že už máme podobnou
třídu Employee. Neimplementuje všechny
metody třídy Programmer, ale část.
Zde je kód naší již existující třídy:
<?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é v našem případě udělat to, aby
naše nová třída Programmer zdědila
část potřebných metod od třídy
Employee (a část pak implementujeme
už v samotné nové třídě):
<?php
class Programmer extends Employee
{
}
?>
Zároveň víme, že třída Pogrammer
by měla implementovat rozhraní
iProgrammer:
<?php
class Programmer implements iProgrammer
{
}
?>
Pojďme zkombinovat dědičnost od třídy
Employee a implementaci rozhraní
iProgrammer:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Výsledkem bude, že naše třída Pogrammer
zdědí od třídy Employee metody
__construct, getName a getSalary,
zatímco metody addLang a getLangs
budeme muset implementovat:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// implementace
}
public function getLangs()
{
// implementace
}
}
?>
Rozhraní iProgrammer je jedno,
zda jsou metody původní nebo zděděné
- hlavní je, aby všechny popsané metody byly
implementovány.
Zkopírujte kód mé třídy Employee
a kód rozhraní iProgrammer. Nekopírujte
mou přípravku třídy Programmer -
bez nahlížení do mého kódu implementujte tuto
třídu samostatně.