Nasleđivanje od klase i implementacija interfejsa u OOP u PHP-u
Klasa može naslediti od druge klase i pritom implementirati neki interfejs. Razmotrimo na praktičnom primeru.
Neka želimo da napravimo klasu Programmer,
koja će imati ime, platu i listu jezika
koje programer poznaje.
Trenutno je naš opis klase prilično nejasan:
da, u klasi će biti ime, plata, jezici -
ali koje će metode biti u našoj klasi?
Hajde da preciznije opišemo našu klasu pomoću
interfejsa iProgrammer:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Recimo da smo pretražili već implementirane
klase i, ispostavilo se, već imamo sličnu
klasu Employee. Ona ne implementira sve
metode klase Programmer, ali deo njih.
Evo koda već postojeće klase kod nas:
<?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;
}
}
?>
Logično je u našem slučaju učiniti tako da
naša nova klasa Programmer nasledi
deo potrebnih metoda od klase
Employee (a deo ćemo kasnije implementirati
već u samoj novoj klasi):
<?php
class Programmer extends Employee
{
}
?>
Pritom nam je poznato da klasa Pogrammer
treba da implementira interfejs
iProgrammer:
<?php
class Programmer implements iProgrammer
{
}
?>
Hajde da spojimo nasleđivanje od klase
Employee i implementaciju interfejsa
iProgrammer:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Ispostaviće se da će naša klasa Pogrammer
naslediti od klase Employee metode
__construct, getName i getSalary,
a metode addLang i getLangs
moraćemo da implementiramo:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// implementacija
}
public function getLangs()
{
// implementacija
}
}
?>
Interfejsu iProgrammer je svejedno,
rodne metode u klasi ili nasleđene
- glavno je da svi opisani metodi budu
implementirani.
Kopirajte kod moje klase Employee
i kod interfejsa iProgrammer. Nemojte kopirati
moju šablon klase Programmer -
ne gledajući u moj kod implementirajte ovu
klasu samostalno.