Traits als Solche kann man auch mit älteren Perl- und PHP- Versionen wo Traits nicht Bestandteil der Sprache sind bauen.
Ja. Sicher. Sag ich doch. Mit Delegation
Delegation braucht man dafür nicht.
(um den Aufruf zur Trait-Methode zu delegieren) und Injektion (um dem Trait das nutzende Objekt verfügbar zu machen).
Das nutzende Objekt braucht man nicht im Tait sondern in den Methoden eines Trait. So nutzt man nicht einen Trait schlechthin sondern Methoden eines Trait. Von daher wird die aufrufende Instanz nicht an den Trait übergeben sondern an die Methode beim Aufruf derselben, gewöhnlich mit dem Pfeiloperator $instance->foo()
.
Und seitdem in Perl wie auch in PHP Instanzen Referenzen sind, kann man diese Referenzen natürlich auch anderweitig übergeben. Von einer Injektion ist jedoch nur dann die Rede, wenn eine solche Übergabe in den Konstruktor erfolgt. Hierzu wäre anzumerken, daß Traits keine Instanzen ezeugen und damit ist der Begriff der Injektion hier falsch.
MFG