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 !"
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Dans notre jeu de combat, nous allons ajouter un trait VieTrait
qui contient deux méthodes : augmenterVie()
et diminuerVie()
. Ces méthodes seront utilisées pour augmenter ou diminuer les points de vie d'un personnage.
Voici les étapes à suivre :
- Créez un fichier
main.php
(pour faire plus simple, nous allons placer tout notre code dans un seul fichier). - Dans ce fichier, déclarez le trait
VieTrait
avec les deux méthodes. - Chaque méthode prendra en paramètre un nombre entier qui représente le nombre de points de vie à augmenter ou à diminuer.
- Chaque méthode modifiera une propriété
pointsDeVie
de la classe qui utilise le trait. Cette propriété représente les points de vie actuels du personnage. - Utilisez ce trait dans les classes
Guerrier
etSorcier
. - Assurez-vous que chaque classe a une propriété
pointsDeVie
et initialisez cette propriété dans le constructeur de chaque classe. - Créez des instances de
Guerrier
etSorcier
et utilisez les méthodesaugmenterVie()
etdiminuerVie()
pour modifier leurs points de vie. - Affichez les points de vie des personnages après chaque modification pour vérifier que tout fonctionne correctement.
Une solution
Vous devez être connecté pour voir le contenu.