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 :
<?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 :
<?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) :
<?php
class Programmer extends Employee
{
}
?>
En même temps, nous savons que la classe Pogrammer
doit implémenter l'interface
iProgrammer :
<?php
class Programmer implements iProgrammer
{
}
?>
Combinons l'héritage de la classe
Employee et l'implémentation de l'interface
iProgrammer :
<?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 :
<?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.
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.