Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

PHP: Objektorientierte Programmierung

Traits

Testen Sie unsere 2017 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Traits sind "Versatzstücke", mit denen Klassen um Methoden oder auch Eigenschaften erweitert werden können.
07:07

Transkript

Darf ich vorstellen: Traits. Traits sind kleine Versatzstücke, mit denen man Klassen erweitern und ergänzen kann. Ein Trait ist relativ einfach erzeugt, ich brauche das Schlüsselwort trait, ich brauche für den Trait einen Namen, und in geschwungenen Klammern, habe ich dann besagte Methoden, oder auch Eigenschaften, die ich eben mit Hilfe dieses Traits übergeben möchte. Wenn Sie hier jetzt in meinem Fall einen Syntax error angezeigt bekommen, so ist das eine Eigenart von Aptana Studio 3, denn Traits sind relativ junge Elemente, das heißt, es gibt sie erst seit PHP5.4, und da ist jetzt die syntaxmäßige Unterstützung noch nicht durch und durch gegeben, aber ich weiß, dass es dafür schon einen Bug-Report gibt, also es ist nur eine Frage der Zeit, bis es da zu Analysen kommt. Allerdings, mit diesen Traits stimmt alles, es ist alles richtig, es wird halt nur aus Versehen ein Fehler gemeldet. Gut, aber zurück zu den Traits. Sie fragen sich jetzt vielleicht, was der Unterschied zwischen einem Interface und einem Trait ist? Ein Trait kann nicht nur die Vorschrift einer Methode beinhalten, sondern ein Trait kann eine komplette Methode beinhalten. also eine vollständige Methode, die dann in einer Klasse implementiert werden kann. Und eine Klasse implementiert einen Trait, indem sie das Schlüsselwort use verwendet und dann den Namen des Traits. Und - eine Klasse kann beliebig viele Traits aufnehmen, und wenn es mehrere Traits sind, dann werden die einfach hintereinandergereiht, nur mit einem Komma getrennt. Ich muss gestehen, dass ich dieses Beispiel so wie es hier steht, fast direkt aus der PHP-Dokumentation übernommen habe, weil es einfach mit kurzem prägnanten Code genau das ausdrückt, was einen Trait ausmachen kann. Sehen wir uns jetzt mal dieses Beispiel etwas näher an, ich habe eben diese zwei Traits, wobei der erste Trait das Wort "Hallo" ausgeben sollte, und der zweite Trait das Wort "Welt", und dann habe ich hier eine Klasse, die eben von beiden Traits Gebrauch macht, aber dann mit einer eigenen Methode, den zweiten Trait überschreibt. und dann sollte da statt "Welt" eben "Erde" stehen. Und dann habe ich hier noch eine Methode, die einfach nichts anderes macht, als ein Rufzeichen ausgeben und einen Zeilenumbruch. Gut, und dann habe ich hier eine Kindklasse, sie erweitert eben meine MyHelloWorld Klasse, und macht jetzt fürs erste nichts anderes, als ebenfalls diese beiden Traits einbinden. So, und hier unten habe ich dann meine Objekte, die sich aus diesen Klassen ergeben. Also einerseits habe ich ein Objekt o, dass sich auf MyHelloWorld bezieht, und ich kann jetzt diese Traits, dadurch dass ich sie eingebunden habe, auch direkt anwenden, so als wären sie klassenintern. Und dasselbe mache ich jetzt mit meiner zweiten Kindklasse, die jetzt im Objekt p instanziiert wurde. Und ich habe wieder beide Trait-Elemente eingebunden, und dann auch vom Elternelement übernommen die Methode sayExclamationMark. Wenn wir uns das Ganze jetzt anschauen, so habe ich im Moment genau das Ergebnis was ich eigentlich erwarten sollte, oder auch nicht erwarten sollte, sehen wir es uns mal genauer an. Ursprünglich sollte, laut den beiden Traits stehen: Hallo Welt! Dann, wird aber Welt überschrieben von der Elternfunktion mit Erde. Und das ist jetzt das, was ich auch als erstes ausgegeben bekomme, nämlich: Hallo Erde! Das kommt von meinem o-Objekt, und dann habe ich als zweites das Kindelement, und das sollte jetzt eigentlich, ja vom Elternelement, das Hallo Erde! erben, tut es aber nicht, sondern das Kindelement gibt jetzt HalloWelt! aus, also das, was ursprünglich im Trait drinnen stand. So, und jetzt merken Sie auch schon wo der Vorteil eines Traits und auch die Hürde eines Traits liegt. Ein Trait hat nämlich mit dieser Vererbung nichts am Hut, das heißt, ein Trait kümmert sich nicht um das Elternelement, außer ich schaffe es ihm explizit an. Und damit kann ich jetzt im Kindelement, sozusagen ein im Elternelement überschriebenes Ergebnis, trotzdem wieder zur Anwendung bringen. Würde ich allerdings im Kindelement selbst diese Trait-Ausgabe überschreiben, was ich hier jetzt tue, dann - und speichern muss ich es auch noch - so, dann werde ich natürlich diesen Trait sehr wohl auch überschreiben. So, jetzt kriege ich tatsächlich auch mein Hallo Erdkreis von meinem Kindelement ausgegeben. Wenn Sie mehr Details zu Traits wissen wollen, dann schauen Sie in der Dokumentation nach, die ist recht ausführlich und wie gesagt, mit diesem Beispiel, kann man ganz gut sich schon ein Bild davon machen. Traits sind sehr zwiespältig betrachtet, das heißt es gibt Entwickler die behaupten, man bräuchte sie gar nicht, weil sie sehr wohl auch mit anderen Möglichkeiten zu lösen wären. Und das Problem und der Vorteil sind ja eben, dass sie der Vererbung etwas "in die Suppe spucken", wenn ich das so sagen darf, und ich habe aber in einem Artikel ein ziemlich bestechendes Beispiel gelesen, wo jemand ein Trait sehr effektiv anwenden konnte, nämlich da hatte er ein komplett fix und fertiges System. und in dieses etwas ältere, fix und fertige System, musste er eine zusätzliche Funktion einbinden, und hätte er jetzt nicht mit Traits arbeiten können, hätte er wahrscheinlich den ganzen Code neu umschreiben müssen, und da kam ihm eben das Arbeiten mit Traits sehr entgegen. Ja, es bleibt Ihnen überlassen, ob und wenn sie Traits einsetzen, sie umgehen, letztendlich das Problem von Kindklassen, dass sie nur eine Elternklasse haben können, und das macht den Charme eines Traits.

PHP: Objektorientierte Programmierung

Lernen Sie alle Aspekte kennen, die bei der Umsetzung des OOP-Programmierstils in PHP eine Rolle spielen.

2 Std. 32 min (34 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:23.09.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!