Traits in PHP 5.4

Werbung

Traits? Nein, das sind die nicht kleinen Schokoladenkügelchen. Traits sind eine der neuen Funktionen in PHP 5.4.

Dies alleine wäre noch keine Meldung wert, sondern die Tatsache, dass Code Wiederverwendbarkeit in PHP wieder einen Schritt weiter ist.

Aber wie funktioniert Traits in PHP 5.4?

In jedem Buch über PHP Programmierung, aber nicht nur dort, steht früher oder später etwas von Code Wiederverwendbarkeit oder Reusability. Das hört sich immer sehr schön und einfach an, aber das ist es in der Realität leider nicht.

In PHP sind Mehrfachvererbungen nicht möglich. Also

funktioniert also nicht.

Traits sind keine Schokoladenkügelchen

Wie aber können mir Traits bei der Programmierung in PHP helfen? Ich habe mir hier mal ein Beispiel ausgedacht. Ein sogenanntes Real World Example.

Also, in meinem Beispiel schreiben wir eine Anwendung für einen Blumenladen. In dieser Anwendung gibt es Produkte wie Blumen (Rosen und Tulpen) und Behälter (Vasen, Kübel).

Bevor man sich an eine neue Anwendung macht, versucht man in der Regel gleichartige Objekte so weit wie möglich runterzubrechen.

Hier meine drei Klassen für die Blumen:

So, jetzt mache ich mich an die Behälter, also Vasen und Kübel.

Und jetzt fällt mir etwas auf. Auch Vasen und Kübel haben eine Farbe, aber keine Länge, sondern eine Höhe. Da es auch nicht passen würde, kann ich Vasen und Kübel nicht von Blume ableiten. Hier hilft die Traits Funktion.

Werbung

So könnte das aussehen mit Hilfe von Traits:

Was nicht da ist, kann nicht fehlerhaft sein

Die Klassen für die Tulpe, Rose, Vase und Kübel habe ich im Traits Beispiel weggelassen. Diese müssten natürlich trotzdem erstellt werden. Aber selbst in diesem kleinen Beispiel konnte ich bereits die beiden Methoden getFarbe() und setFarbe() zusammenfassen. In einer großen Anwendung kommen da hunderte Zeilen Code und unzählige Methoden zusammen, die nicht mehr doppelt geschrieben werden müssen. Und was nicht da ist, kann auch nicht fehlerhaft sein.

Und das Schöne an der Sache ist, man kann mehrere Traits benutzen. Also es könnte nicht nur den Trait „Farbe“ geben, sondern evtl. auch „Preis“. Das ist allerdings nur ein Beispiel und ob es Sinn ergibt, wird man während der Programmierung mit der neuen Funktion schon herausfinden.

Gleiche Methodennamen in unterschiedlichen Traits

Ein Problem bleibt noch falls es in zwei Traits, die ich benutzen will, zwei Methoden mit dem gleichen Namen gibt. Aber auch hier gibt es eine elegante Lösung. Insteadof und as sind die die Heilsbringer.

Auch hier ein Beispiel dazu:

Beispiel Insteadof: Hier wird die Datenbank save() Methode verwendet anstelle der (insteadof) CSV save() Methode.

Beispiel as: Hier wird die CSV save() Methode anstelle der Database save() Methode verwendet. Allerdings wird für die Database save() Methode ein Alias erzeugt und daher ist es auch hier über den Alias verfügbar.

Link: PHP Traits

 

Hat dir der Beitrag gefallen? Dann würde ich mich sehr freuen, wenn du ihn weiterempfehlen würdest.Share on FacebookShare on Google+Tweet about this on Twitter

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.