Herança de classe e implementação de interface em OOP em PHP

Uma classe pode herdar de outra classe e ao mesmo tempo implementar alguma interface. Vamos considerar um exemplo prático.

Suponha que queremos criar uma classe Programmer, que terá um nome, um salário e uma lista de linguagens que o programador conhece. No momento, nossa descrição da classe é bastante vaga: sim, a classe terá nome, salário, linguagens - mas quais métodos estarão em nossa classe?

Vamos descrever nossa classe com mais precisão usando a interface iProgrammer:

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

Suponha que vasculhamos nossas classes já implementadas e, acontece que já temos uma classe semelhante Employee. Ela não implementa todos os métodos da classe Programmer, mas uma parte. Aqui está o código da nossa classe já existente:

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

É lógico, no nosso caso, fazer com que nossa nova classe Programmer herde parte dos métodos necessários da classe Employee (e uma parte implementaremos depois na própria nova classe):

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

Além disso, sabemos que a classe Pogrammer deve implementar a interface iProgrammer:

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

Vamos combinar a herança da classe Employee e a implementação da interface iProgrammer:

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

O resultado é que nossa classe Pogrammer herdará da classe Employee os métodos __construct, getName e getSalary, e os métodos addLang e getLangs teremos que implementar:

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

Para a interface iProgrammer, não importa se os métodos são nativos da classe ou herdados - o principal é que todos os métodos descritos estejam implementados.

Задание 1

Copie o código da minha classe Employee e o código da interface iProgrammer. Não copie meu esboço da classe Programmer - sem espiar o meu código, implemente esta classe você mesmo.