Наследование от класса и реализация интерфейса в ООП в 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 - не подсматривая в мой код реализуйте этот класс самостоятельно.