Bei der Fortsetzung unserer Diskussion der objektorientierten Programmierung in WordPress müssen wir anfangen, über die Idee des Umfangs zu sprechen. Kurz gesagt, bezieht sich dies auf die Idee, dass Klassen steuern können, wie auf ihre Attribute und Funktionen zugegriffen wird (oder ob überhaupt auf sie zugegriffen werden kann)..
Dies ist eine weitere Kernidee der objektorientierten Programmierung. Danach sollten wir in guter Verfassung sein, um mit der Arbeit an einem eigentlichen WordPress-Plugin zu beginnen.
Bevor Sie fortfahren, beachten Sie bitte, dass jeder Artikel in dieser Serie auf dem vorherigen Artikel aufbaut. Wenn Sie also nur zu uns kommen, schauen Sie sich die vorherigen Artikel der Serie an:
Wenn Sie erst einmal fertig sind, setzen wir unsere Diskussion über den letzten Teil des Paradigmas fort, das wir verstehen müssen, bevor wir uns mit der objektorientierten Programmierung in WordPress praktisch befassen.
Die erste Definition des Bereichs laut Wikipedia lautet wie folgt:
Bei der Computerprogrammierung ist der Gültigkeitsbereich einer Namensbindung - eine Zuordnung eines Namens zu einer Entität, beispielsweise einer Variablen - der Teil eines Computerprogramms, für den die Bindung gültig ist: Dabei kann der Name verwendet werden, um auf die Entität zu verweisen. In anderen Teilen des Programms kann sich der Name auf eine andere Entität beziehen (sie kann eine andere Bindung haben) oder auf nichts (es kann ungebunden sein)..
Wenn Sie kein erfahrener Programmierer sind, ist dies etwas verwirrend, nicht wahr? In der Tat kann es sogar wie ein bisschen Jargon gelesen werden.
Dies ist jedoch in Ordnung, da der Zweck dieses Artikels darin besteht, eine funktionale Definition des Umfangs sowie einige praktische Beispiele dazu zu liefern, wie er im Kontext eines Programms aussieht.
Bevor wir uns die drei verschiedenen Aspekte des Geltungsbereichs in der objektorientierten Programmierung ansehen, formulieren wir eine sauberere Definition.
Der Gültigkeitsbereich bezieht sich kurz darauf, wie auf Variablen und Funktionen von Fremdobjekten oder untergeordneten Objekten innerhalb des Programms zugegriffen werden kann.
Angenommen, Sie haben eine Blogeintrag
Objekt und ein Autor
Objekt. Nehmen wir an, der Autor hat Attribute für Vorname
und Nachname
und das Blogeintrag
möchte auf sie zugreifen, um sie beispielsweise auf dem Bildschirm anzuzeigen.
Vielleicht hilft eine übergeordnete Illustration:
In diesem Beitrag die Blogeintrag
fragt nach Namensinformationen von der Autor
Klasse. Beachten Sie, dass sich im obigen Diagramm der Klassenname im ersten Blog befindet, die Attribute im zweiten Block und dann die leeren dritten Blöcke normalerweise für Funktionen reserviert sind.
Aber das geht über das hinaus, Hm, Umfang dieses Artikels.
Denken Sie daran: Klassen repräsentieren normalerweise Substantive, Attribute repräsentieren Adjektive und Funktionen repräsentieren Verben oder Aktionen, die das Objekt ausführen kann. Zu diesem Zweck kapseln Klassen normalerweise ihre Informationen auf strategische Weise, so dass Wie sie arbeiten versteckt und Was Sie können dies durch ihre öffentlich verfügbaren Funktionen.
Dazu müssen Variablen und Funktionen ein bestimmter Bereich zugewiesen werden, der anderen Objekten Zugriff auf ihre Informationen gewährt. Zu diesen Objekttypen gehören Objekte von Drittanbietern, die die von einer Klasse repräsentierten Daten nutzen möchten, und ein anderer Objekttyp stellt ein Objekt dar erbt Informationen aus dieser Klasse.
Vererbung geht über das hinaus, was wir in diesem Artikel behandeln werden; Wir werden dies jedoch später in der Serie für diejenigen behandeln, die sich mit objektorientierter Programmierung auskennen.
Nachdem dies gesagt wurde, sind wir bereit, einen Blick auf ein praktisches Beispiel eines Umfangs zu werfen, einschließlich der Art und Weise, wie wir es bisher in der Serie verwendet haben und wie sich dies auf zukünftige Designentscheidungen auswirkt.
Der oben genannte Primer sollte zumindest auf hoher Ebene erklärt haben, was der Umfang ist und wie er wichtig ist, aber wenn nicht, dann werden die folgenden Abschnitte dies vielleicht tun.
Im Besonderen werden wir uns die verschiedenen Arten von Gültigkeitsbereichen ansehen, die Variablen und Funktionen haben können, wir werden erklären, was jeder bedeutet, und dann werden wir erklären, wann Sie ihn verwenden möchten jeder von ihnen.
Bevor wir uns vorwärts bewegen, beachten Sie, dass die Öffentlichkeit
, geschützt
, und Privatgelände
Schlüsselwörter können für beide Attribute verwendet werden und Funktionen. Dies ist wichtig, da die Regeln, die für Attribute gelten, auch für Funktionen gelten.
Schauen wir uns nun die einzelnen Keywords an.
Einfach gesagt, Öffentlichkeit
Attribute und Funktionen stehen zur Verfügung jeden Typ des Objekts, das versucht, auf die Variable oder die Funktion zuzugreifen.
Zum Beispiel:
first_name = $ name; public function set_last_name ($ name) $ this-> last_name = $ name; public function get_first_name () return $ this-> first_name; public function get_last_name () return $ this-> last_name; // Andere Klassendetails…
Bei diesem Setup kann jedes Objekt, das eine Instanz dieses Objekts aufruft, nicht nur auf das Objekt zugreifen $ first_name
und $ last_name
Attribute können aber auch Veränderung Sie. Ebenso kann jedes Objekt, das eine Instanz eines Objekts aufruft, auf die Funktionen zugreifen, um den Namen abzurufen und den Namen zu ändern.
Es stellt sich also die Frage: Was ist der Sinn dieser Funktionen, wenn das Attribut veröffentlicht wird? Ich meine, es ist überflüssig, nicht wahr? Ja. Und wir werden es später in dem Artikel beantworten, sobald wir über das sprechen Privatgelände
Stichwort.
Nächster, geschützt
Attribute und Funktionen stehen im Kontext der Klasse, in der sie definiert sind, zur Verfügung nicht für Objekte von Drittanbietern. Das sagten sie kann aus ihrer eigenen Klasse aufgerufen werden, aber nicht von externen Klassen.
first_name = $ name; geschützte Funktion set_last_name ($ name) $ this-> last_name = $ name; protected function get_first_name () return $ this-> first_name; protected function get_last_name () return $ this-> last_name; // Andere Klassendetails…
Es gibt jedoch eine Ausnahme: Unterklassen.
Angenommen, Sie definieren eine benannte Klasse Mitwirkender
das ist eine Unterklasse von Autor
, das bedeutet, dass die Mitwirkender
hat Zugriff auf alles des geschützt
(und Öffentlichkeit
) Attribute und Funktionen der übergeordneten Klasse.
In Anbetracht des obigen Codes können Sie Methoden wie aufrufen
get_first_name ()
aus demAutor
Klasse oder innerhalb derMitwirkender
Klasse aber nicht von beliebigen externen Klassen.Zugegebenermaßen haben Unterklassen mehr mit Vererbung zu tun, worüber wir später in der Serie noch sprechen werden; Ich möchte jedoch darauf hinweisen, um eine wichtige Klarstellung zwischen
Öffentlichkeit
Attribute und Funktionen undPrivatgelände
Attribute und Funktionen.Privatgelände
Zusamenfassend,
Privatgelände
Attribute und Funktionen sperren die Attribute und Funktionen in der Klasse, in der sie definiert sind. Dies bedeutet, dass kein externes Objekt oder keine Unterklassen darauf zugreifen können irgendein der Informationen.Natürlich ist dies die strengste Form des Geltungsbereichs, aber das sollte nicht gelesen werden, als wäre es eine schlechte Sache (oder eine gute Sache). Stattdessen sollen bestimmte Informationen dazu dienen, im Kontext der Klasse, in der sie definiert sind, verborgen (oder abstrahiert) zu bleiben.
Kommen wir zu unserem ersten Beispiel zurück und schauen wir uns an, wie wir die Klasse so umgestalten können, dass sie sowohl für externe Klassen als auch für Unterklassen den maximalen Nutzen bietet.
first_name = $ name; private Funktion set_last_name ($ name) $ this-> last_name = $ name; private Funktion get_first_name () return $ this-> first_name; private Funktion get_last_name () return $ this-> last_name; // Andere Klassendetails…Zunächst zeigt dieses Beispiel eine schlechte Verwendung der
Privatgelände
Stichwort.In diesem Beispiel kann nicht nur auf die Attribute zugegriffen werden, sondern auch auf die Funktionen nicht. Mit anderen Worten, für andere Objekte in der "Außenwelt" scheint diese Klasse nichts verfügbar zu haben. Schlimmer noch, nicht einmal Unterklassen können auf diese Informationen zugreifen.
Kurz gesagt macht der Code keinen Sinn.
Lassen Sie uns dies ein wenig umgestalten, so dass das Attribut verborgen bleibt (und somit für Objekte von Drittanbietern nicht zugänglich ist), und wir geben einen Weg für Objekte von Drittanbietern an, um die Namen abzurufen, aber dies wird der Fall sein nur Erlauben Sie der aktuellen Klasse und ihren Unterklassen, diese zu ändern:
Vorname; public function get_last_name () return $ this-> last_name; // Andere Klassendetails…Dies ist natürlich nur ein Beispiel. Natürlich lassen wir einige Implementierungsdetails so aus, dass wir dies nicht tun wissen, für welche Details beispielsweise die Namen aktualisiert werden müssen.
Aber es spielt keine Rolle: Dies zeigt ein vollständiges Beispiel dafür
Privatgelände
,geschützt
, undÖffentlichkeit
Teilaspekte einer Klasse können zusammenarbeiten, um einen sicheren, strategischen Zugang zu Informationen zu bieten.Abstraktion und Informationsverstecken
In Bezug auf den Umfang können Sie das Argument vorbringen, dass alles auf Abstraktion und das Verstecken von Informationen zurückzuführen ist.
Das heißt, Klassen (die Blaupausen für Objekte sind, wenn Sie sich an unsere früheren Artikel erinnern) sollten ihre Informationen strategisch so organisieren, dass:
Privatgelände
In der Tat gehe ich noch einen Schritt weiter und sage, dass Sie wahrscheinlich nicht viele Attribute sehen, die als gekennzeichnet sind Öffentlichkeit
. Stattdessen sehen Sie eher die Attribute, die als markiert sind geschützt
- zum Zwecke der Unterklasse - oder Privatgelände
, so dass ihre Daten von Funktionen verwaltet werden können, deren Umfang angemessen ist.
Anfangs klingt das relativ einfach, oder? Und das Konzept selbst ist nicht besonders kompliziert, aber wenn es darum geht, Systeme zu erstellen, die eine Reihe verschiedener Objekte benötigen, die alle zusammenarbeiten, um eine solide Abstraktion, saubere Schnittstellen zu bieten, über die Klassen und Unterklassen von Drittanbietern damit interagieren können, und effiziente Wege Das Organisieren von Informationen kann schwieriger werden - es gibt viele bewegliche Teile, die zu berücksichtigen sind.
Das heißt, dies ist eines der Dinge, die durch das Schreiben von Code, die Interaktion mit anderen Entwicklern und das Lesen von Code Erfahrung erzeugen können.
Was auch immer es wert ist, ich habe keine Angst zuzugeben, dass dies immer noch Strategien sind, mit denen ich nicht kämpfe, weil ich die Konzepte nicht verstehe, sondern weil es sehr schwierig sein kann, eine möglichst saubere Klassenimplementierung zu erreichen, insbesondere in einem System das kann sich ändern.
Aber das ist für einen anderen Beitrag zufrieden.
Wenn Sie Fragen oder Kommentare zu dem Thema Umfang haben, zögern Sie nicht, diese in den Kommentaren zu belassen.
Ab dem nächsten Artikel beginnen wir damit, einige dieser Informationen in eine praktische Anwendung für das Erstellen eines WordPress-Plugins zu integrieren.
Für diejenigen von Ihnen, die gewartet haben, wie diese Serie in Verbindung mit WordPress funktioniert, sollte der nächste Artikel alle Konzepte zusammenführen, während wir die Serie mit unserem eigenen WordPress-Plugin fortsetzen und dabei das Konzept der objektorientierten Programmierung verwenden.