Ein Trait ist ein Begriff aus der objektorientierten Programmierung und beschreibt eine wiederverwendbare Sammlung von Methoden und Attributen, ähnlich einer Klasse. Desweiteren können diese Methoden von Instanzen beliebiger Klassen benutzt werden. Ein Trait selbst ist nicht instanziierbar.
Anhand dieser Definition (wiki) ist es ja genau das was ich beabsichtige.
In der Doku findest du auch Beispiele.
Anhand derer erschließt es sich mir leider nicht inwiefern man mit dem was PHP unter einem Trait versteht obenstehendes Ziel erreicht.
Dann geh die Definition dochmal Satz für Satz durch:
Ein Trait ist ein Begriff aus der objektorientierten Programmierung und beschreibt eine wiederverwendbare Sammlung von Methoden und Attributen, ähnlich einer Klasse.
trait Foo {
public int attribut = 42; // <-- Das ist ein Attribut
public methode () : void {} // <-- Das ist eine Methode
} // Das Trait ist eine Sammlung von Methoden und Attributen
Desweiteren können diese Methoden von Instanzen beliebiger Klassen benutzt werden.
class A {use Foo;} // <-- Das ist eine Klasse
class B {use Foo;} // <-- Das ist auch eine Klasse
$a = new A(); // <-- Das ist eine Instanz der Klasse A
$b = new B(); // <-- Das ist eine Instanz der Klasse B
$a->attribut; // Die Instanz von A kann Attribute des Traits verwenden
$a->methode(); // Die Instanz von A kann Methoden des Traits verwenden
$b->attribut; // Die Instanz von B kann ebenfalls Attribute des Traits verwenden
$b->methode(); // Die Instanz von B kann ebenfalls Methoden des Traits verwenden
Ein Trait selbst ist nicht instanziierbar.
$foo = new Foo(); // Das geht nicht. Das Trait kann nicht instanziiert werden.