Objektorientierte Programmierung in WordPress Vererbung II

Im vorigen Artikel haben wir das Konzept der objektorientierten Vererbung eingeführt, versucht, die Begriffe der Laien zu platzieren, und haben uns dann auch das konzeptionelle Modell, wie es im Kontext der Programmierung funktioniert, auf hoher Ebene betrachten.

Bevor wir jedoch weitergehen und / oder wenn Sie nur an der Serie teilnehmen, lesen Sie bitte alles, was wir bisher besprochen haben, indem Sie die vorherigen Artikel lesen:

  1. Eine Einleitung
  2. Klassen
  3. Typen
  4. Kontrollstrukturen: Bedingte Anweisungen
  5. Kontrollstrukturen: Schleifen
  6. Funktionen und Attribute
  7. Umfang
  8. Plugin erstellen I
  9. Plugin bauen II
  10. Dokumentieren Sie das Plugin I
  11. Dokumentieren Sie das Plugin II
  12. Vererbung I

Ja, wir haben eine Menge abgedeckt, aber um den Grundstein für einen Anfänger zu legen, der über einen starken Platz verfügt, von dem aus er objektorientiertes PHP schreiben kann, gibt es viel zu prüfen.

Nachdem dies gesagt wurde, beginnen wir mit Vererbung in die Zwischenthemen des Paradigmas, so dass dies der abschließende Artikel sein wird, der einen Blick auf die Anfängerkonzepte gibt, nach denen wir die Serie mit einem zusammenfassenden Beitrag beenden.

Vererbung geprüft

Denken Sie daran, dass wir Vererbung wie folgt definiert haben:

Vererbung ist, wenn eine Klasse als übergeordnete Klasse für eine untergeordnete Klasse dient, die eine Reihe von Attributen und Methoden bereitstellt, die sowohl dem übergeordneten als auch dem untergeordneten Element gemeinsam sind. das Kind jedoch als die Fähigkeit, seine eigenen Attribute einzuführen.

Es ist ein bisschen weniger formell als das, was Sie in einem wissenschaftlichen Buch oder sogar in Wikipedia finden, aber es erklärt die Idee immer noch in Begriffen, die diesen Punkt veranschaulichen.

In diesem Artikel werden wir alle erforderlichen Codes, Funktionen und reservierten Wörter im Zusammenhang mit dem Thema durchsehen. Wir werden einen Blick darauf werfen, wie wir ihn in einer sehr einfachen, plattformagnostischen Weise in PHP implementieren können , Und dann werden wir eine tatsächliche Implementierung der Vererbung in WordPress überprüfen.

Mit diesem Satz als Wegweiser für den Artikel wollen wir also loslegen und loslegen.

PHP-Einrichtungen

Um Vererbung in objektorientiertem PHP zu implementieren, gibt es eine Reihe reservierter Wörter, mit denen wir uns vertraut machen müssen. Glücklicherweise sind die meisten Wörter, über die wir bereits gesprochen haben, und diejenigen, die wir nicht kennen, klar genug, so dass man sich leicht an sie erinnern kann.

Bevor wir uns also mit dem Code beschäftigen, wollen wir uns alle reservierten Wörter in der Sprache ansehen, die wir kennen müssen, damit wir tatsächlich anfangen können, etwas zu kreieren.

  • erweitert ist ein reserviertes Wort, das angibt, dass eine Klasse das Kind einer anderen Klasse ist. Zum Beispiel in unserem vorherigen Artikel a Post erweitert Inhalt. Wir werden das bald im Spiel sehen.
  • Privatgelände ist ein Attribut, das auf Eigenschaften und Funktionen angewendet wird, auf die zugegriffen werden kann nur im Kontext der Klasse, in der sie definiert sind.
  • geschützt ist ähnlich wie Privatgelände mit der Ausnahme, dass auf die Eigenschaften und Methoden, die als solche markiert sind, auf die angegebene Klasse und alle untergeordneten Klassen zugegriffen werden kann.
  • Öffentlichkeit ist das Gegenteil von Privatgelände es bedeutet, dass jede Klasse - die angegebene Klasse, eine Unterklasse oder eine Fremdklasse - auf die Eigenschaft oder Methode zugreifen kann, um ihre Informationen zu ändern oder die Funktion aufzurufen.

Sie müssen auch mit dem vertraut sein :: operator, aber wir werden das etwas später in diesem Artikel behandeln, wenn wir uns den Code anschauen.

Und das ist es - nichts Schreckliches, oder? Und was noch besser ist: Wenn Sie uns in dieser Serie mitverfolgt haben, sind Sie wahrscheinlich mit jedem Wort vertraut, für das Sie sich entscheiden erweitert.

Jedenfalls wollen wir mit einem Beispiel beginnen.

Einige Beispielcodes

Um mit dem Schreiben von Beispielcode beginnen zu können, müssen wir uns genau festlegen, was wir versuchen zu modellieren (schließlich macht dies Code doch, oder?). 

Im Einklang mit dem in dieser Serie verwendeten Thema - insbesondere im letzten Artikel - wird eine übergeordnete Klasse aufgerufen Inhalt, und zwei Kinderklassen, von denen jede benannt wird Kommentar und Post, beziehungsweise.

Auf diese Weise können wir sehen, wie Eigenschaften und Methoden in einer einzelnen Klasse vorhanden sind, und wie Kinder auf Attribute ihrer Eltern zugreifen können und wie Eltern ihre Eigenschaften und Funktionen auch vor ihren Kindern schützen können.

Die Implementierung wird jedoch weitaus mehr zeigen, als darüber zu reden, also fangen wir an, Code zu schreiben.

Die übergeordnete Klasse

In unserem Beispiel ist die übergeordnete Klasse die Inhalt weil beide Unterklassen - das heißt die Post und das Kommentar - sind Inhaltstypen, denen eindeutige Informationen zugeordnet sind, die nicht spezifisch sind Inhalt Klasse.

Der Schlüssel zur Vererbung besteht darin, alle Eigenschaften und Methoden zu identifizieren, die in allen Klassen üblich sind, und sie in der übergeordneten Klasse oder in unserer Klasse in Inhalt.

Obwohl dies je nach Ansicht variieren kann, richten wir uns ein Inhalt so dass es umfasst:

  • ein Datum, an dem der Inhalt veröffentlicht wurde
  • ein Autor 
  • eine Methode zum Speichern des Inhalts
  • eine Methode zum Formatieren des Inhalts
  • eine Methode zum Abrufen des Inhalts
  • und eine Methode zum Abrufen des Inhaltsautors 

Zuerst schauen wir uns den Code an, dann erklären wir alles, was damit los ist.

publish_date = $ date-> format ('Y-m-d H: i: s'); $ this-> author = "; öffentliche Funktion save ($ author, $ content) $ this-> author = $ author; $ this-> content = $ this-> format_content ($ content); $ this-> content  öffentliche Funktion read () return $ this-> content; private Funktion format_content ($ content) return strip_tags (striplashes ($ content)); öffentliche Funktion get_author () return $ this-> author;

Wie bereits erwähnt, haben wir zwei geschützt Attribute und a Privatgelände Attribut. Erinnern Sie sich daran, dass dies bedeutet, dass alle Unterklassen auf das Modul zugreifen können $ publish_date und das $ Autor, aber nur das Inhalt kann auf das zugreifen $ content Attribut.

Beachten Sie auch, dass ein Großteil des Codes, den Sie in der obigen Klasse sehen, grundlegendes objektorientiertes PHP ist. Es gibt nichts Besonderes, das sich direkt mit der Vererbung befasst, außer einigen der von uns deklarierten Zugriffsmodifizierer. Das heißt, Code ist relativ üblich, wie wir ihn bisher in diesem Tutorial gesehen haben.

Es ist erwähnenswert, dass die private Funktion zwei Dinge demonstriert:

  1. Wie Privatgelände Funktionen sind nur im Kontext der Klasse verfügbar, in der sie definiert sind.
  2. Entfernt alle Tags und Schrägstriche vom Inhalt, sodass Markup nicht mit dem Inhalt gespeichert werden kann.

Natürlich ist dieser Code nicht mit einer Datenbank oder einem Dateisystem oder irgendetwas verbunden, aber der Punkt bleibt bestehen.

Beachten Sie, dass im obigen Code einige Dinge hinzugefügt werden müssen, um die Anforderungen von PHP zu erfüllen. Sie gehen über den Rahmen dieses Artikels hinaus, aber es ist hier darauf hinzuweisen:

  • Der Code zu date_default_time_set ist erforderlich, um die Zeitzone festzulegen, ab der die Zeit abgerufen werden kann.
  • Der Konstruktor ist für das anfängliche Festlegen des Veröffentlichungsdatums des Inhalts verantwortlich und initialisiert die Autoreneigenschaft mit einer leeren Zeichenfolge. Dies ist so, dass a Post kann einen eigenen Autor haben und die Kommentar kann auch einen eigenen Autor haben. Wie wir später sehen werden, a Kommentar kann sogar das Standard-Veröffentlichungsdatum überschreiben.

Beachten Sie auch, dass wir den Inhalt von der Website abrufen können lesen Methode und wir können den Autor von der get_author Funktion.

Das erste Kind

Als Nächstes wollen wir das erstellen Post Unterklasse. Zuerst schauen wir uns den Code an und dann werden wir sehen, wie er mit dem Code interagiert Inhalt Klasse, die wir gerade erstellt haben.

Autor = 'Tom McFarlin';  public function post ($ content) $ this-> format_content ($ content); 

Die Klasse erscheint klein, oder? Es gibt keine Eigenschaften - weil es sie von dem erbt Inhalt class - und es gibt nur zwei Funktionen, von denen eine für die Klasse einzigartig ist - Post.

Beachten Sie, dass wir im Konstruktor zuerst den übergeordneten Konstruktor mit dem Aufruf von aufrufen :: Operator. Sie können viel mehr darüber im Handbuch lesen, aber es genügt zu sagen, dass der Operator reserviert ist, um auf eine Reihe von Unterschieden außerhalb der Klasse zu verweisen, in der er definiert ist. In unserem Fall ist dies der Aufruf an den Konstruktor der Eltern.

Als Nächstes habe ich mich entschieden, meinen Namen als Autor des Beitrags festzulegen. Beachten Sie, dass ich die $ das Stichwort. Da die Unterklasse Eigenschaften von ihrem übergeordneten Element erbt, kann sie sich auf diese Eigenschaften beziehen, sofern sie in sich selbst definiert wurden.

Beachten Sie, dass dies nicht nur deshalb möglich ist Post erweitert Inhalt aber weil die Eigenschaft als gekennzeichnet ist geschützt im Inhalt, auch. Wenn es als markiert wurde Privatgelände, das wäre nicht möglich.

Das zweite Kind

Jetzt haben wir die erstellt Post Klasse haben wir auch die Kommentar erinnern Sie sich daran, dass jemand einen Kommentar zu einem Beitrag hinterlässt. Wäre dieser Code auf Produktionsniveau, würde es weitaus mehr Code geben: Wir müssten einen Kommentar mit einem Beitrag verknüpfen, feststellen, ob ein Kommentar eine Antwort auf einen vorhandenen Kommentar ist, den Status eines Kommentars markieren und so weiter.

Aber zum Zwecke der Demonstration Erbe, Wir lassen das alles aus und konzentrieren uns nur auf die Dinge, die die Konzepte antreiben können.

save ('John Doe', $ comment); 

Wie Sie sehen können, die Kommentar Code unterscheidet sich nicht sehr von der Post Code. Bis zu einem gewissen Grad - das ist gut, weil es zeigt, dass wir die richtigen Teile in unsere Basisklasse abstrahiert haben. 

Wie auch immer, bemerken Sie das, nachdem wir das gebaut haben Kommentar, Wir rufen den übergeordneten Konstruktor an. Als nächstes definieren wir die hinzufügen Methode, die dafür verantwortlich ist, den eingehenden Kommentar zu übernehmen und dann zu speichern, indem der Autor und der Inhalt des Kommentars an den Autor übergeben werden sparen Methode.

Das Schöne ist, dass das sparen Die Methode ist bereits in der Basisklasse definiert, die auch die gesamte Formatierung durch Verwendung von a übernimmt Privatgelände Funktion, so erhalten wir diese Funktionalität, wenn wir unsere Kindklasse erstellen.

Mit dem Beispiel arbeiten

Nachdem dies erledigt ist, wollen wir ein paar Beispiele ausführen, um zu zeigen, wie die Teile zusammenpassen. Um sicherzustellen, dass dieser Code ausgeführt wird, benötigen Sie lediglich einen Webserver, ein Verzeichnis, in dem PHP-Skripts ausgeführt werden können, und einen Texteditor.

Zuerst erstellen wir eine Instanz von Inhalt und dann rufen wir eine Debug-Anweisung auf, damit wir sehen können, was eine Instanz der Klasse ausmacht.

$ content = neuer Inhalt (); var_dump ($ content);

Wenn alle Funktionen korrekt sind, sollten Sie alles oben sehen.

Als nächstes wollen wir einen Beitrag erstellen. Da wir alle Informationen im Kontext der Klasse festlegen, müssen wir wirklich nur eine Funktion für die Klasse aufrufen, um die Informationen anzuzeigen.

Zum Beispiel:

$ post = neuer Beitrag (); echo 'Der Autor des Beitrags ist:'. $ post-> get_author ();

Da wir alles im Code selbst eingerichtet haben, demonstriert das einfache Aufrufen der Methode das Konzept.

Schließlich können wir ein erstellen Kommentar, Ruf den hinzufügen Versuchen Sie in einer Instanz der Klasse, bösartigen Code zu übergeben (nur um zu sehen, dass er von unserem Code entfernt wird). Wenn alles gut geht, sollten Sie Folgendes sehen:

$ comment = neuer Kommentar (); $ comment-> add (''); echo 'Der Kommentar lautet:'. $ comment-> read ();

Und das ist es: Unsere einfache Vererbung.

Vererbung in WordPress

Wenn es um die Vererbung in WordPress geht, fällt mir als erstes - und wahrscheinlich auch bei anderen Entwicklern - das Widgets-API ein. Ich sage das deshalb, weil die API durch Vererbung betrieben wird.

Sicher, Widgets können ohne Verwendung der API erstellt werden, aber ich würde behaupten, dass dies ein Fehltritt in der Entwicklung ist. Warum wird es komplizierter, wenn bereits ein Fundament dafür vorhanden ist? Aber ich schweife ab.

Das Schöne an dieser speziellen API ist, dass sie alle wichtigen Punkte objektorientierter Programmierung und Vererbung bei der Arbeit zeigt. Hier ist ein Beispielcode, der direkt aus dem Codex stammt:

Nun, da wir uns mit dem konzeptionellen Modell befasst haben, die Schlüsselwörter und die Methodik betrachtet, unseren eigenen Code geschrieben und unser eigenes Beispiel erstellt haben, sollte dies relativ leicht zu folgen sein.

Aber hier ist die Sache: Eine der besten Möglichkeiten, um Code zu schreiben, ist die fortlaufende Umsetzung der Konzepte. Das heißt, die Ideen anderer Leute zu erkunden, die fortgeschrittenere Dinge getan haben, als Sie in früheren Arbeiten.

Schauen Sie sich das erste Beispiel im WordPress-Codex an. Wenn Sie mit einer neueren Version von PHP arbeiten, die Funktionen wie Namespaces (ein etwas fortgeschritteneres Thema) unterstützt, sollten Sie sich auch das zweite Beispiel ansehen.

Je mehr Sie den Code überprüfen und ihn auseinander nehmen, desto mehr sollten Sie darüber erfahren. Wenn Sie jedoch weiter gehen als in diesem Artikel, werden wir uns nicht in der gesamten Serie befinden.

Bis zum Ende

An dieser Stelle haben wir alles Material für Anfänger behandelt, das für die Grundlagen eines Anfängerleitfadens zum Schreiben von objektorientiertem PHP erforderlich ist. Im abschließenden Artikel geben wir eine Zusammenfassung aller von uns behandelten Themen, sodass wir eine einzige Referenz für die großen Ideen haben, die mit einem Lesezeichen versehen, gespeichert oder später referenziert werden können.

Zusätzlich haben wir eine kurze Diskussionsrunde über eine Folgeserie, die wir jedoch bis dahin speichern werden.

Wenn Sie Fragen, Kommentare und / oder Feedback zu Inhalt, Code oder Beispielen oben haben, können Sie dies in den Kommentaren unten tun.