Les traits en POO en PHP
Comme vous le savez déjà, en PHP, il est impossible d'hériter de plusieurs classes à la fois, seulement d'une seule. Nous avons déjà abordé une solution à ce problème : au lieu de l'héritage, utiliser les objets d'une classe à l'intérieur d'une autre.
Il existe une autre manière en PHP. Elle consiste à utiliser les traits. Un trait représente un ensemble de propriétés et de méthodes qui peuvent être inclus dans une autre classe. Ainsi, les propriétés et les méthodes du trait seront perçues par la classe comme si elles étaient les siennes.
La syntaxe d'un trait est la même que celle d'une classe,
à l'exception du fait que le nom du trait doit
être déclaré à l'aide du mot-clé
trait.
Il est impossible de créer une instance d'un trait - les traits
sont destinés uniquement à être connectés à d'autres
classes. La connexion elle-même est réalisée
à l'aide de la commande use, après laquelle
le nom du trait à connecter est indiqué, séparé par un espace.
Cette commande est écrite au début de la classe.
Voyons l'application des traits avec un exemple
pratique. Supposons que nous ayons le trait
Helper, contenant les propriétés privées
name et age, ainsi que leurs accesseurs (getters) :
<?php
trait Helper
{
private $name;
private $age;
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Supposons que nous ayons également la classe User,
dans le constructeur de laquelle les propriétés
name et age sont définies :
<?php
class User
{
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Ajoutons maintenant les accesseurs pour les propriétés
de notre classe User. Seulement, nous n'allons pas
les écrire dans la classe elle-même, mais nous allons simplement connecter
le trait Helper, dans lequel ces méthodes
sont déjà implémentées :
<?php
class User
{
use Helper; // connecte le trait
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Après la connexion du trait, les méthodes et propriétés de ce trait apparaîtront dans notre classe. De plus, nous y accéderons comme si c'étaient les méthodes et les propriétés de la classe elle-même :
<?php
$user = new User('john', 30);
echo $user->getName(); // affichera 'john'
echo $user->getAge(); // affichera 30
?>
Implémentez la classe City avec les propriétés
name, age, population
et leurs accesseurs (getters). Que notre classe
pour raccourcir son code utilise le trait
Helper que nous avons déjà créé.