Voici un exemple simple de déclaration d'un trait, qui contient la méthode toString :
trait TraitToString { // Affichage des variables d'une classe public function toString() { $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $name => $value) { echo "$name : " . $this->$name . "; "; } } }
Pour l'intégrer dans une classe, on fait, par exemple :
class User { use TraitToString; // Insertion du trait private $firstName; private $lastName; public function __construct($firstName, $lastName) { $this->firstName = $firstName; $this->lastName = $lastName; } }
Ce qui ajoute la méthode toString à la classe User.
$user = new User("Frederic", "Theriault"); $user->toString();
Dans l'exemple précédent, la fonction toString est greffée à la classe User.
Ce qui est intéressant est que ce trait peut être utilisé dans plusieurs classes. Dans certains cas, ceci peut être une solution au fait que PHP ne supporte pas l'héritage multiple.
Ce qui est bien avec les traits, c'est surtout que ceux-ci peuvent être composé de plusieurs traits, et donc on peut facilement faire des traits complexes et offrant de multiples services, à partir de traits simple. Ça permet une très grande flexibilité et maintenance facile.