Klasės paveldėjimas ir interfeiso realizavimas OOP PHP

Klasė gali paveldėti iš kitos klasės ir tuo pačiu metu realizuoti kokį nors interfeisą. Panagrinėkime praktiniu pavyzdžiu.

Tarkime, norime sukurti klasę Programmer, kuri turės vardą, atlyginimą ir kalbų sąrašą, kurias programuotojas moka. Kol kas mūsų klasės aprašymas yra gana miglotas: taip, klasėje bus vardas, atlyginimas, kalbos - bet kokie metodai bus mūsų klasėje?

Leiskite tiksliau apibūdinti mūsų klasę naudodami interfeisą iProgrammer:

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

Tarkime, mes pasidomėjome jau mumis realizuotomis klasėmis ir, pasirodo, mes jau turime panašią klasę Employee. Ji realizuoja ne visus klasės Programmer metodus, bet dalį. Štai jau mūsų egzistuojančios klasės kodas:

Employee.php<?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;
    }
  }
?>

Logiška mūsų atveju padaryti taip, kad mūsų nauja klasė Programmer paveldėtų dalinį reikalingų sau metodų iš klasės Employee (o dalį mes vėliau realizuosime jau pačioje naujoje klasėje):

Programmer.php<?php
  class Programmer extends Employee
  {
    
  }
?>

Tuomet mums žinoma, kad klasė Pogrammer turi realizuoti interfeisą iProgrammer:

Programmer.php<?php
  class Programmer implements iProgrammer
  {
    
  }
?>

Sujungkime paveldėjimą iš klasės Employee ir interfeiso realizavimą iProgrammer:

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

Taip mūsų klasė Pogrammer paveldės iš klasės Employee metodus __construct, getName ir getSalary, o metodus addLang ir getLangs mums teks realizuoti:

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

Interfeisui iProgrammer vis vien, gimdieji metodai klasėje ar paveldėti - svarbiausia, kad visi aprašyti metodai būtų realizuoti.

Задание 1

Nukopijuokite mano klasės Employee kodą ir interfeiso iProgrammer kodą. Nekopijuokite mano klasės Programmer ruošinio - nežiūrėdami į mano kodą realizuokite šią klasę savarankiškai.