⊗ppOpIfII 74 of 107 menu

PHP-də OOP-də Sinifdən Miras və Interfeysin Realizasiyası

Sinif başqa bir sinifdən miras ala bilər və eyni zamanda hansısa interfeysi realizə edə bilər. Praktiki misalda nəzərdən keçirək.

Tutaq ki, biz Programmer sinifi yaratmaq istəyirik, onun adı, maaşı və proqramçının bildiyi dillərin siyahısı olacaq. Hələki sinifimizin təsviri olduqca qeyri-müəyyəndir: bəli, sinifdə ad, maaş, dillər olacaq - amma sinifimizdə hansı metodlar olacaq?

Gəlin sinifimizi iProgrammer interfeysi ilə daha dəqiq təsvir edək:

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

Tutaq ki, biz artıq realizə etdiyimiz sinifləri araşdırdıq və məlum oldu ki, artıq bizdə Employee adlı oxşar sinif var. O, Programmer sinfinin hamısını deyil, ancaq bir hissəsini realizə edir. Bizdə artıq mövcud olan sinfin kodu belədir:

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

Məntiqlidir ki, bizim vəziyyətimizdə yeni Programmer sinifimizin, özünə lazım olan metodların bir hissəsini Employee sinfindən miras almasını təmin edək (qalan hissəsini isə sonra artıq yeni sinifdə özümüz realizə edərik):

<?php class Programmer extends Employee { } ?>

Eyni zamanda bizə məlumdur ki, Programmer sinfi iProgrammer interfeysini realizə etməlidir:

<?php class Programmer implements iProgrammer { } ?>

Gəlin Employee sinfindən miras almağı və iProgrammer interfeysinin realizasiyasını birləşdirək:

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

Belə çıxır ki, bizim Programmer sinfimiz Employee sinfindən __construct, getNamegetSalary metodlarını miras alacaq, addLanggetLangs metodlarını isə biz realizə etməli olacıq:

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

iProgrammer interfeysinə heç nə fərqi yoxdur, metodlar sinfə öz və ya miras alınmışdır - əsas odur ki, təsvir edilmiş bütün metodlar realizə olunsun.

Mənim Employee sinfimin kodunu və iProgrammer interfeysinin kodunu köçürün. Mənim Programmer sinfimin hazırlanmış kodunu köçürməyin - mənim koduma baxmadan bu sinifi özünüz realizə edin.

azbydeenesfrkakkptruuz