⊗ppOpIfII 74 of 107 menu

Dziedziczenie po klasie i implementacja interfejsu w OOP w PHP

Klasa może dziedziczyć po innej klasie i jednocześnie implementować jakiś interfejs. Rozważmy na praktycznym przykładzie.

Załóżmy, że chcemy utworzyć klasę Programmer, która będzie miała imię, wynagrodzenie i listę języków, które programista zna. Na razie nasz opis klasy jest dość rozmyty: tak, w klasie będzie imię, wynagrodzenie, języki - ale jakie metody będą w naszej klasie?

Opiszmy naszą klasę dokładniej za pomocą interfejsu iProgrammer:

<?php interface iProgrammer { public function __construct($name, $salary); public function getName(); public function getSalary(); public function getLangs(); public function addLang($lang); } ?>

Załóżmy, że przejrzeliśmy już przez zaimplementowane przez nas klasy i, okazuje się, że mamy już podobną klasę Employee. Nie implementuje ona wszystkich metod klasy Programmer, ale część. Oto kod już istniejącej u nas klasy:

<?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; } } ?>

Logiczne w naszym przypadku jest, aby nasza nowa klasa Programmer odziedziczyła część potrzebnych sobie metod po klasie Employee (a część zaimplementujemy później już w samej nowej klasie):

<?php class Programmer extends Employee { } ?>

Przy tym wiemy, że klasa Pogrammer powinna implementować interfejs iProgrammer:

<?php class Programmer implements iProgrammer { } ?>

Połączmy dziedziczenie po klasie Employee i implementację interfejsu iProgrammer:

<?php class Programmer extends Employee implements iProgrammer { } ?>

Okaże się, że nasza klasa Pogrammer odziedziczy po klasie Employee metody __construct, getName i getSalary, a metody addLang i getLangs będziemy musieli zaimplementować:

<?php class Programmer extends Employee implements iProgrammer { public function addLang($lang) { // implementacja } public function getLangs() { // implementacja } } ?>

Dla interfejsu iProgrammer nie ma znaczenia, czy metody są natywne dla klasy, czy odziedziczone - główne, aby wszystkie opisane metody były zaimplementowane.

Skopiuj kod mojej klasy Employee i kod interfejsu iProgrammer. Nie kopiuj mojego szablonu klasy Programmer - nie podglądając w mój kod zaimplementuj tę klasę samodzielnie.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć