Наследование ад класа і рэалізацыя інтэрфейсу ў ААП у PHP

Клас можа наследоваць ад другога класа і пры гэтым рэалізоўваць нейкі інтэрфейс. Разгледзім на практычным прыкладзе.

Хай мы хочам зрабіць клас Programmer, у якога будзе імя, заработная плата і спіс моў, якія ведае праграміст. Пакуль наша апісанне класа вельмі расплыўчатае: так, у класе будзе імя, заработная плата, мовы - але якія метады будуць у нашым класе?

Давайце дакладней апішам наш клас з дапамогай інтэрфейсу iProgrammer:

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

Хай мы пакапаліся ў ужэ рэалізаваных намі класах і, аказваецца, у нас ужо ёсць падобны клас Employee. Ён рэалізуе не ўсе метады класа Programmer, але частку. Вось код ужо існуючага ў нас класа:

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

Лагічна ў нашым выпадку зрабіць так, каб наш новы клас Programmer унаследаваў частку неабходных сабе метадаў ад класа Employee (а частку мы потым рэалізуем ужо ў самым новым класе):

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

Пры гэтым нам вядома, што клас Pogrammer павінен рэалізоўваць інтэрфейс iProgrammer:

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

Давайце аб'яднаем наследование ад класа Employee і рэалізацыю інтэрфейсу iProgrammer:

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

Атрымаецца, што наш клас Pogrammer унаследуе ад класа Employee метады __construct, getName і getSalary, а метады addLang і getLangs нам прыйдзецца рэалізаваць:

Programmer.php<?php
  class Programmer extends Employee implements iProgrammer
  {
    public function addLang($lang)
    {
      // рэалізацыя
    }
    
    public function getLangs()
    {
      // рэалізацыя
    }
  }
?>

Інтэрфейсу iProgrammer ўсё роўна, родныя метады ў класа ці ўнаследаваныя - галоўнае, каб усе апісаныя метады былі рэалізаваны.

Задание 1

Скапіруйце код майго класа Employee і код інтэрфейсу iProgrammer. Не капіруйце маю загатоўку класа Programmer - не падглядаючы ў мой код рэалізуйце гэты клас самастойна.