Ich kann Ihre Verwirrung anhand des von Ihnen angegebenen Beispiels verstehen. Das ist wirklich ein schlechter Weg, eine Klasse zu benutzen ... und nur weil eine Klasse benutzt wird, macht das kein System-OOP.
Im Fall von Hybrid verwenden sie lediglich eine Klasse, um ihren Funktionen einen Namensraum zu geben. Da Hybrid ein Design- Framework ist, können untergeordnete Designs Funktionsnamen wiederverwenden, ohne dass sich der Entwickler um Namenskollisionen sorgen muss. In vielen Fällen ist ein Themen-Framework (übergeordnetes Thema) so komplex, dass viele Entwickler untergeordneter Themen niemals genau verstehen, was unter der Haube vor sich geht.
Wenn Hybrid keine Klassenstruktur verwenden würde, müssten Entwickler von untergeordneten Designs wissen, wie alle vorhandenen Funktionsaufrufe lauten, damit sie die Wiederverwendung von Namen vermeiden können. Und ja, Sie könnten allen Funktionen einen eindeutigen Slug voranstellen, aber das macht den Code schwer lesbar, schwer zu warten und von Natur aus nicht wiederverwendbar, wenn Sie weitere Systeme entwickeln, die dieselbe Funktionalität nutzen möchten.
Um Ihre Fragen zu beantworten
Wtf? Was bringt das? Offensichtlich werden Sie nicht zwei oder mehr Instanzen desselben Themas gleichzeitig verwenden.
Nein, Sie werden nicht zwei oder mehr Instanzen desselben Themas verwenden. Aber wie gesagt, stellen Sie sich die Klassenstruktur in diesem Fall als Namensraum für die Funktionen vor und nicht als Erzeugung einer traditionellen Objektinstanz. Wenn Sie alles in einer Klasse zusammenfassen und entweder zum Aufrufen von Methoden ( myClass->method();
) oder zum direkten Aufrufen von Methoden ( myClass::method();
) instanziieren, können Sie Namespace-Dinge auf lesbare und wiederverwendbare Weise erstellen.
Natürlich können Sie myClass_method();
stattdessen auch so etwas verwenden, aber wenn Sie diesen Code in einem anderen Thema, in einem Plug-In oder in einem anderen Framework wiederverwenden möchten, müssen Sie alle Präfixe ändern. Es ist sauberer, alles in einer Klasse zu halten, und Sie können es viel schneller neu entwickeln und bereitstellen.
Nehmen wir an, dass die Plugins dies für den Namespace tun (was lächerlich ist), aber was ist die thematische Entschuldigung? Vermisse ich etwas?
In den meisten Situationen stimme ich Ihnen zu. Diese Mehrheit lässt jedoch schnell nach. Ich hoste mehrere Sites in einer MultiSite-Installation, die Variationen desselben Themas verwenden. Anstatt dasselbe Thema mit geringfügigen Unterschieden immer wieder neu zu erstellen, habe ich eine einzige "Klasse" für das übergeordnete Thema, und alle untergeordneten Themen erweitern diese Klasse. Auf diese Weise kann ich benutzerdefinierte Funktionen für jeden Standort definieren und gleichzeitig ein allgemeines Gefühl der Einheitlichkeit im gesamten Netzwerk aufrechterhalten.
Einerseits können Theme-Entwickler einen klassenbasierten Ansatz wählen, um ihre Funktionalität als Namensraum zu definieren (was nicht lächerlich ist, wenn Sie in einer Umgebung arbeiten, in der Sie immer wieder Teile desselben Codes wiederverwenden). Andererseits können Theme-Entwickler einen klassenbasierten Ansatz wählen, um die Erweiterbarkeit durch untergeordnete Themes zu vereinfachen.
Was ist der Vorteil eines solchen Themas?
Wenn Sie auf Ihrer Website nur Hybrid verwenden, gibt es für Sie als Endbenutzer nur wenige Vorteile. Wenn Sie ein untergeordnetes Thema für Hybrid erstellen, ergeben sich Vorteile durch Namespacing und Erweiterbarkeit. Wenn Sie für ThemeHybrid arbeiten , liegt der Vorteil in der schnellen und effizienten Wiederverwendung von Code in anderen Projekten (Prototype, Leviathan usw.).
Und wenn Sie ein Theme-Entwickler sind, der eine bestimmte Funktion von Hybrid, aber nicht das gesamte Theme mag, liegt der Vorteil in der schnellen und effizienten Wiederverwendung von Code in Ihrem Nicht-Hybrid-Projekt (vorausgesetzt, es ist auch GPL).