Héritage de classe et implémentation d'interface en POO en PHP

Une classe peut hériter d'une autre classe et en même temps implémenter une interface. Examinons cela avec un exemple pratique.

Supposons que nous voulons créer une classe Programmer, qui aura un nom, un salaire et une liste de langages que le programmeur connaît. Pour l'instant, notre description de la classe est assez vague : oui, la classe aura un nom, un salaire, des langages - mais quelles méthodes y aura-t-il dans notre classe ?

Décrivons notre classe plus précisément à l'aide de l'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);
  }
?>

Supposons que nous avons fouillé dans nos classes déjà implémentées et, il s'avère que nous avons déjà une classe similaire Employee. Elle n'implémente pas toutes les méthodes de la classe Programmer, mais une partie. Voici le code de notre classe déjà existante :

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

Il est logique dans notre cas de faire en sorte que notre nouvelle classe Programmer hérite d'une partie des méthodes dont elle a besoin de la classe Employee (et nous implémenterons une partie plus tard dans la nouvelle classe elle-même) :

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

En même temps, nous savons que la classe Pogrammer doit implémenter l'interface iProgrammer :

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

Combinons l'héritage de la classe Employee et l'implémentation de l'interface iProgrammer :

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

Il en résultera que notre classe Pogrammer héritera de la classe Employee les méthodes __construct, getName et getSalary, tandis que les méthodes addLang et getLangs devront être implémentées par nous :

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

L'interface iProgrammer s'en fiche, que les méthodes soient natives à la classe ou héritées - l'important est que toutes les méthodes décrites soient implémentées.

Задание 1

Copiez le code de ma classe Employee et le code de l'interface iProgrammer. Ne copiez pas mon ébauche de la classe Programmer - sans regarder mon code, implémentez cette classe vous-même.