vendredi 25 septembre 2026

À propos

Contact

Lexique · PHP

Trait

En anglais : « Trait »

Bloc de méthodes réutilisables qu'on incorpore dans une ou plusieurs classes sans passer par l'héritage, pour partager du comportement commun.

PHP n’autorise qu’un seul parent par classe : impossible d’hériter à la fois d’une classe « Cacheable » et d’une classe « Journalisable ». Un trait contourne cette limite en offrant un ensemble de méthodes toutes prêtes qu’on peut « coller » dans n’importe quelle classe, un peu comme un module qu’on branche plutôt qu’une filiation qu’on hérite.

Déclaration en PHP

Un trait se déclare avec le mot-clé trait et s’incorpore dans une classe avec use : trait Journalisable { public function log(string $m) { error_log(static::class . ": $m"); } }, puis class Commande { use Journalisable; }. Une même classe peut utiliser plusieurs traits à la fois.

Dans WordPress

Le cœur historique n’utilise pas de traits, mais on les rencontre fréquemment dans des extensions modernes et des frameworks bâtis sur WordPress pour partager, par exemple, une logique commune de rendu de blocs Gutenberg entre plusieurs classes qui n’ont sinon aucun lien de parenté.

Exemple

trait Singleton {
    private static ?self $instance = null;

    public static function instance(): self {
        return self::$instance ??= new self();
    }
}

class GestionnaireCache {
    use Singleton;
}

Pièges fréquents

Si deux traits utilisés dans la même classe définissent une méthode du même nom, PHP déclenche une erreur fatale à moins de résoudre explicitement le conflit avec la clause insteadof ou de renommer l’une des méthodes avec as. Un trait ne peut pas non plus être instancié directement : il n’existe que rattaché à une classe, et il ne peut pas non plus étendre une classe ni implémenter d’interface à sa place, contrairement à ce que sa syntaxe proche d’une classe pourrait laisser croire.