Aller au contenu principal

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


Qu'est-ce qu'un trait en PHP ?


Comment déclare-t-on un trait en PHP ?


Comment utilise-t-on un trait dans une classe en PHP ?


Peut-on utiliser plusieurs traits dans une même classe ?


Qu'arrive-t-il si deux traits utilisés dans une même classe ont une méthode du même nom ?



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 :

  1. Créez un fichier main.php (pour faire plus simple, nous allons placer tout notre code dans un seul fichier).
  2. Dans ce fichier, déclarez le trait VieTrait avec les deux méthodes.
  3. Chaque méthode prendra en paramètre un nombre entier qui représente le nombre de points de vie à augmenter ou à diminuer.
  4. 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.
  5. Utilisez ce trait dans les classes Guerrier et Sorcier.
  6. Assurez-vous que chaque classe a une propriété pointsDeVie et initialisez cette propriété dans le constructeur de chaque classe.
  7. Créez des instances de Guerrier et Sorcier et utilisez les méthodes augmenterVie() et diminuerVie() pour modifier leurs points de vie.
  8. Affichez les points de vie des personnages après chaque modification pour vérifier que tout fonctionne correctement.
Une solution