АКЦЫЯ: бясплатныя месячныя курсы па стварэнні сайтаў
на выбар: вёрстка, JavaScript, PHP, Python або фрэймворкі. Сёння апошні дзень для запісу! Націскай!
⊗ppOpIfII 74 of 107 menu

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

byenru