⊗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šuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј