Наследование ад класа і рэалізацыя інтэрфейсу ў ААП у 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
-
не падглядаючы ў мой код рэалізуйце гэты
клас самастойна.