it-swarm.com.de

Verwenden von Klassen anstelle von globalen Funktionen in functions.php

In vielen Themen, die ich gesehen habe (einschließlich TwentyEleven) und in den Beispielen, die ich online gefunden habe, werden beim Erstellen der functions.php-Datei für ein Thema alle Funktionen in einem globalen Bereich deklariert. Zur Verdeutlichung sieht eine typische Funktionsdatei 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 die Dinge ein wenig besser "gekapselt" werden könnten, wenn eine Klasse verwendet würde:

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 Funktionsnamen
  • Zugriff auf Instanzvariablen (der größte Vorteil IMO)
  • Keine globalen Funktionen

Die Nachteile:

  • Klassenname kann immer noch Konflikte verursachen
  • Nicht so klar, mit einem untergeordneten Thema "anzupassen" (müsste eine übergeordnete Klasse erweitern)
  • Die meisten Themen haben das nicht so gemacht, also würden Sie sich dem Trend widersetzen

Wahrscheinlich übersehe ich einige Dinge, aber ich frage mich, warum ich nicht den OOP Ansatz wähle. Es fühlt sich für mich ein bisschen "sauberer" an, wenn überhaupt. Vielleicht irre ich mich?

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

11
Andy Adams

Die Verwendung einer Klasse zur Kapselung ist eine sehr verbreitete Methode für Plugins, die von einer Reihe von Entwicklern verwendet wird. Ich mache das und finde es sauberer. Aber für Plugins. Themen sind von Natur aus prozeduraler.

Wir machen das nicht für Standard-WordPress-Themes, weil es die Eintrittsbarriere erhöht. Die Funktionen sind recht einfach. Das Entfernen von Aktionen, die an Klassen gebunden sind, kann schwierig sein (und unter bestimmten Umständen möglicherweise fehlerhaft sein).

Außerdem sind eine Reihe von Funktionen in den Standardthemen steckbar. Das Erweitern einer Klasse und das Ersetzen der Methoden ist weitaus komplizierter als nur das Definieren der Funktion. Und während zwei verschiedene Aspekte des Codes unterschiedliche Funktionen ersetzen können, können Sie Klassen nicht dynamisch erweitern. Wie Sie betonten, ist die Notwendigkeit, eine Elternklasse zu erweitern, definitiv ein Nachteil.

Ich dachte darüber nach, Twenty Eleven's Theme Options Code zu einer Klasse zu machen, kam aber nie dazu. Diese Art von separater, Plug-in-ähnlicher Funktionalität scheint ein guter Kandidat für die Kapselung zu sein.

9
Andrew Nacin