Verwenden von classn anstelle von globalen functionen in functions.php

In vielen Themen, die ich gesehen habe (einschließlich TwentyEleven) und in den Beispielen, die ich online gefunden habe, wird beim Erstellen der functions.php Datei für ein Theme alle functionalität in einem globalen Geltungsbereich deklariert. Um dies zu verdeutlichen, sieht eine typische functionsdatei folgendermaßen aus:

 function my_theme_do_foo() { // ... } function my_theme_do_bar() { // ... } add_action( 'foo_hook', 'my_theme_do_foo' ); 

Es scheint mir, dass Dinge etwas besser “eingekapselt” werden könnten, wenn eine class benutzt wird:

 class MyTheme { function do_foo() { // ... } function do_bar() { // ... } } $my_theme = new MyTheme(); add_action( 'foo_hook', array( &$my_theme, 'do_foo' ) ); 

Die Vorteile des zweiten Ansatzes (in meinen bescheidenen Augen):

  • Kürzere functionsnamen
  • Zugriff auf Instanzvariablen (der größte Vorteil IMO)
  • Keine globalen functionen

Die Nachteile:

  • classnname könnte immer noch Konflikte verursachen
  • Nicht so klar, um mit einem untergeordneten Thema “anzupassen” (müsste eine Elternklasse erweitern)
  • Die meisten Themen haben es nicht so gemacht, also würdest du dem Trend entgegenwirken

Ich übersehe wahrscheinlich einige Dinge, aber ich frage mich, warum nicht den OOP-Ansatz nehmen? Es fühlt sich ein bisschen “sauberer” für mich an, wenn überhaupt. Vielleicht irre ich mich?

Ich bin ziemlich neu in der Entwicklung von WordPress-Theme, also vergib mir, wenn dies in der WP-Community allgemein bekannt ist :). Ich versuche nur zu lernen, warum die Dinge so sind, wie sie sind.

Solutions Collecting From Web of "Verwenden von classn anstelle von globalen functionen in functions.php"

Die Verwendung einer class für die Kapselung ist ein sehr gängiger Ansatz für Plugins. Ich mache das und ich finde es sauberer. Aber für Plugins. Themen sind eher prozedural.

Wir tun es nicht für Standard-WordPress-Themen, weil es die Einstiegshürde erhöht. Die functionen sind ziemlich einfach. Das Entfernen von Aktionen, die mit classn verknüpft sind, kann schwierig sein (und unter bestimmten Umständen möglicherweise errorshaft).

Außerdem sind einige functionen in den Standardthemen steckbar. Das Erweitern einer class und das Ersetzen der Methoden ist weitaus komplizierter als das Definieren der function. Und während zwei verschiedene Aspekte des Codes verschiedene functionen ersetzen können, können Sie classn nicht dynamisch erweitern. Wie Sie hervorgehoben haben, ist die Notwendigkeit, eine Elternklasse zu erweitern, definitiv ein Nachteil.

Ich habe mir überlegt, Twenty Elevens Themenoptionen als class zu klassifizieren, bin aber nie dazu gekommen. Diese Art von separater, pluginartiger functionalität scheint ein guter Kandidat für die Kapselung zu sein.