Les traits
Notions théoriques
Un trait est une méthode pour réutiliser du code.
C'est une façon d'incorporer des méthodes de différentes classes dans une autre classe.
Un trait est similaire à une classe, mais il n'a pas vocation à être instancié. Au lieu de cela, il est destiné à être utilisé par d'autres classes pour incorporer des méthodes utiles qui peuvent être partagées.
Pour déclarer un trait, il suffit d'utiliser le mot-clé trait
suivi du nom du trait :
trait MonTrait {
public function maMethode() {
// code...
}
}
Pour utiliser un trait dans une classe, on utilise le mot-clé use
à l'intérieur de la classe :
class MaClasse {
use MonTrait;
}
Exemple pratique
Imaginons que dans notre jeu de combat, nous avons plusieurs types de personnages (Guerriers, Sorciers, Archers...) qui ont tous une méthode pour attaquer et une autre pour se défendre. Au lieu de répéter ces méthodes dans chaque classe, nous pouvons les mettre dans un trait.
trait CombatTrait {
public function attaquer() {
echo "J'attaque mon adversaire !";
}
public function defendre() {
echo "Je me défends contre une attaque !";
}
}
class Guerrier {
use CombatTrait;
}
class Sorcier {
use CombatTrait;
}
$guerrier = new Guerrier();
$guerrier->attaquer(); // Affiche "J'attaque mon adversaire !"
$sorcier = new Sorcier();
$sorcier->defendre(); // Affiche "Je me défends contre une attaque !"