Наслеђење класе и имплементација интерфејса у ООП у PHP
Класа може наследити од друге класе и при томе имплементирати неки интерфејс. Размотрићемо на практичном примеру.
Претпоставимо да желимо да направимо класу Programmer,
која ће имати име, плату и списак језика
које программер познаје.
Засад је наш опис класе прилично нејасан:
да, класа ће имати име, плату, језике -
али које методе ће имати наша класа?
Хајде да прецизније опишемо нашу класу уз помоћ
интерфејса iProgrammer:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Претпоставимо да смо се позабавили већ имплементираним
класама и, испоставља се, већ имамо сличну
класу Employee. Она не имплементира све
методе класе Programmer, али део.
Ево кода већ постојеће класе коју имамо:
<?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;
}
}
?>
Логично је у нашем случају да учинимо да
наша нова класа Programmer наследи
део потребних метода од класе
Employee (а део ћемо касније имплементирати
већ у самој новој класи):
<?php
class Programmer extends Employee
{
}
?>
При томе нам је познато да класа Pogrammer
треба да имплементира интерфејс
iProgrammer:
<?php
class Programmer implements iProgrammer
{
}
?>
Хајде да комбинујемо наслеђење од класе
Employee и имплементацију интерфејса
iProgrammer:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Испоставиће се да ће наша класа Pogrammer
наследити од класе Employee методе
__construct, getName и getSalary,
а методе addLang и getLangs
мораћемо сами да имплементирамо:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// имплементација
}
public function getLangs()
{
// имплементација
}
}
?>
Интерфејсу iProgrammer је свеједно,
домаће методе има класа или наслеђене
- главно је да сви описани методи буду
имплементирани.
Копирајте код моје класе Employee
и код интерфејса iProgrammer. Немојте копирати
мој шаблон класе Programmer -
без поткрадања у мој код имплементирајте ову
класу самостално.