⊗ppOpIfII 74 of 107 menu

კლასის მემკვიდრეობა და ინტერფეისის რეალიზაცია OOP-ში 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 კლასის ჩანაწერს - ჩემს კოდს რომ არ ნახოთ, თავად რეალიზაცია გაუწიოთ ამ კლასს.

azbydeenesfrkakkptruuz