⊗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 - без да надничате в моя код, имплементирайте този клас самостоятелно.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне