Die objektorientierte Programmierung (OOP), ein wichtiges Paradigma in der Software, konzentriert sich auf „Objekte“ – Instanzen von Klassen, die Daten und Verhaltensweisen anstelle von „Aktionen“ enthalten

PHP, bekannt für serverseitiges Scripting, profitiert stark von OOP. Das liegt daran, dass OOP modularen und wiederverwendbaren Code unterstützt, der dadurch leichter zu pflegen ist. Das wiederum erleichtert die Organisation und Skalierbarkeit von großen Projekten.

Die Beherrschung von OOP ist wichtig für Entwickler/innen, die mit WordPress-Themes, Plugins und individuellen Lösungen arbeiten. In diesem Artikel erklären wir dir, was OOP in PHP ist und welche Auswirkungen es auf die WordPress-Entwicklung hat. Außerdem zeigen wir dir, wie du die OOP-Prinzipien in PHP umsetzen kannst.

Voraussetzungen

Um den praktischen Teil dieses Artikels verfolgen zu können, solltest du Folgendes mitbringen

Vorteile von OOP in der PHP-Entwicklung

OOP verbessert die PHP-Entwicklung erheblich, indem es die Modularität, Wiederverwendbarkeit, Skalierbarkeit, Wartbarkeit und Teamarbeit verbessert. Es organisiert den PHP-Code, indem es ihn in Objekte unterteilt, die jeweils einen bestimmten Teil der Anwendung repräsentieren. Mithilfe von Objekten kannst du Code leicht wiederverwenden, was Zeit spart und Fehler reduziert.

Vor diesem Hintergrund wollen wir uns nun mit zwei besonderen Vorteilen von OOP in PHP befassen und aufzeigen, wie sie den Entwicklungsprozess verändern.

1. Wiederverwendbarkeit und Wartung des Codes

OOP in PHP macht die Wiederverwendung von Code durch Vererbung und Polymorphie ganz einfach. Klassen können Eigenschaften und Methoden von anderen Klassen verwenden. So kannst du alten Code mit wenigen Änderungen auf neue Weise verwenden.

OOP macht es auch einfacher, sich um deinen Code zu kümmern. Kapselung bedeutet, dass Objekte ihre Details für sich behalten und nur das weitergeben, was sie wirklich brauchen, indem sie spezielle Methoden, sogenannte Getter und Setter, verwenden. Dieser Ansatz verhindert, dass Änderungen in einem Teil deiner Anwendung Probleme in anderen Teilen verursachen und macht den Code einfacher zu aktualisieren und zu pflegen.

Da die Objekte in sich abgeschlossen sind, ist es außerdem einfacher, Fehler in bestimmten Teilen des Systems zu finden und zu beheben. Das verbessert die allgemeine Codequalität und Zuverlässigkeit.

2. Bessere Übersichtlichkeit und Struktur

OOP macht den PHP-Code mit Hilfe von Klassen und Objekten sauberer und übersichtlicher. Klassen wirken wie Vorlagen für Objekte und halten alles, was zusammengehört, an einem Ort fest.

Mit OOP können Klassen auch Funktionen von anderen Klassen nutzen, sodass du nicht immer wieder den gleichen Code schreiben musst. All dies trägt dazu bei, dass der Code sauberer, leichter zu korrigieren und besser organisiert ist.

Klarer OOP-Code hilft Teams, besser zusammenzuarbeiten. Es ist für alle einfacher zu verstehen, was der Code macht, was bedeutet, dass weniger Zeit für Erklärungen und mehr Zeit für die Arbeit benötigt wird. Außerdem werden so Fehler vermieden, was dem Projekt hilft, auf Kurs zu bleiben. Und wenn der Code sauber und ordentlich ist, können neue Teammitglieder schnell den Anschluss finden.

OOP in PHP implementieren

In OOP for PHP organisierst du deinen Code mit Klassen und Objekten, wie bei einem Bauplan oder einem Haus. Du erstellst Klassen für alles (wie Benutzer oder Bücher), einschließlich ihrer Eigenschaften und Aktionen. Mit Hilfe der Vererbung baust du dann neue Klassen aus bestehenden auf und sparst so Zeit, indem du Code nicht wiederholst. Und weil durch die Kapselung einige Teile der Klasse privat bleiben, ist dein Code sicherer.

In den folgenden Abschnitten erfährst du, wie du die OOP-Prinzipien in deiner PHP-Programmierung effektiv nutzen kannst. Wir erstellen ein Content Management System (CMS) für die Verwaltung von Artikeln.

1. Definiere eine Klasse mit Eigenschaften und Methoden

Beginne mit einer Klasse Article, die die Eigenschaften Titel, Inhalt und Status enthält – zusammen mit Methoden zum Setzen und Anzeigen dieser Eigenschaften.

class Article {
    private $title;
    private $content;
    private $status;

    const STATUS_PUBLISHED = 'published';
    const STATUS_DRAFT = 'draft';

    public function __construct($title, $content) {
        $this->title = $title;
        $this->content = $content;
        $this->status = self::STATUS_DRAFT;
    }

    public function setTitle($title) {
        $this->title = $title;
        return $this;
    }

    public function setContent($content) {
        $this->content = $content;
        return $this;
    }

    public function setStatus($status) {
        $this->status = $status;
        return $this;
    }

    public function display() {
        echo "<h2>{$this->title}</h2><p>{$this->content}</p><strong>Status: {$this->status}</strong>";
    }
}

2. Objekte erstellen und Methodenverkettung implementieren

Erstelle ein Artikelobjekt und verwende die Methodenverkettung, um seine Eigenschaften einzustellen:

$article = new Article("OOP in PHP", "Object-Oriented Programming concepts.");
$article->setTitle("Advanced OOP in PHP")->setContent("Exploring advanced concepts in OOP.")->setStatus(Article::STATUS_PUBLISHED)->display();

3. Verkapselung und Vererbung verstärken

Verbessere die Kapselung durch die Verwendung von Getter- und Setter-Methoden und erstelle eine Klasse FeaturedArticle, die von Article erbt:

class FeaturedArticle extends Article {
    private $highlightColor = '#FFFF00'; // Default highlight color

    public function setHighlightColor($color) {
        $this->highlightColor = $color;
        return $this;
    }

    public function display() {
        echo "<div> style='background-color: {$this->highlightColor};'>";
        parent::display();
        echo "</div>";
    }
}

$featuredArticle = new FeaturedArticle("Featured Article", "This is a featured article.");
$featuredArticle->setStatus(FeaturedArticle::STATUS_PUBLISHED)->setHighlightColor('#FFA07A')->display();

4. Interfaces und Polymorphismus

Definiere eine Schnittstelle für veröffentlichbare Inhalte und implementiere sie in der Klasse Article, um Polymorphismus zu demonstrieren:

interface Publishable {
    public function publish();
}

class Article implements Publishable {
    // Existing class code...

    public function publish() {
        $this->setStatus(self::STATUS_PUBLISHED);
        echo "Article '{$this->title}' published.";
    }
}

function publishContent(Publishable $content) {
    $content->publish();
}

publishContent($article);

5. Traits für gemeinsames Verhalten verwenden

In PHP kannst du Traits verwenden, um Funktionen zu Klassen hinzuzufügen, ohne von einer anderen Klasse erben zu müssen. Verwende den folgenden Code, um ein Trait für die Protokollierung von Aktivitäten innerhalb des CMS einzuführen:

trait Logger {
    public function log($message) {
        // Log message to a file or database
        echo "Log: $message";
    }
}

class Article {
    use Logger;

    // Existing class code...

    public function publish() {
        $this->setStatus(self::STATUS_PUBLISHED);
        $this->log("Article '{$this->title}' published.");
    }
}

OOP in der WordPress-Entwicklung

OOP-Prinzipien verbessern die WordPress-Entwicklung erheblich, insbesondere bei der Erstellung von Themes, Plugins und Widgets. Mit Hilfe von OOP kannst du saubereren, skalierbaren und besser wartbaren Code für deine WordPress-Websites schreiben.

In diesem Abschnitt erfährst du, wie du OOP bei der WordPress-Entwicklung einsetzen kannst. Wir stellen Beispiele vor, die du kopieren und zum Testen in eine WordPress-Installation einfügen kannst.

OOP in WordPress-Themes: Benutzerdefinierte Post-Type-Registrierung

Um die Anwendung von OOP in WordPress-Themes zu demonstrieren, erstellst du eine Klasse, die die Registrierung eines benutzerdefinierten Beitragstyps übernimmt.

Platziere den folgenden Code in der Datei functions.php deines Themes. Du findest deine Themes im Verzeichnis wp-content/themes.

class CustomPostTypeRegistrar {
    private $postType;
    private $args;

    public function __construct($postType, $args = []) {
        $this->postType = $postType;
        $this->args = $args;
        add_action('init', array($this, 'registerPostType'));
    }

    public function registerPostType() {
        register_post_type($this->postType, $this->args);
    }
}

// Usage
$bookArgs = [
    'public' => true,
    'label'  => 'Books',
    'supports' => ['title', 'editor', 'thumbnail'],
    'has_archive' => true,
];
new CustomPostTypeRegistrar('book', $bookArgs);

Dieser Code registriert dynamisch einen benutzerdefinierten Beitragstyp book, dessen Details über das Array bookArgs übergeben werden. Du kannst den neu erstellten benutzerdefinierten Beitragstyp in der WordPress-Admin-Seitenleiste mit der Bezeichnung Bücher sehen.

Screenshot der Bücher-Seite in WordPress. Oben auf der Seite befindet sich die Schaltfläche Neuen Beitrag hinzufügen
Das Seitenleistenelement des benutzerdefinierten Beitragstyps Bücher und der entsprechende Beitrag Bücher hinzufügen

Dieses Beispiel zeigt, wie OOP die Funktionalität für die Registrierung von benutzerdefinierten Beitragstypen kapseln kann, so dass sie für verschiedene Arten von Beiträgen wiederverwendet werden kann.

OOP in WordPress-Plugins: Shortcode-Handler

Für ein Plugin-Beispiel entwickelst du eine Klasse, die einen Shortcode für die Anzeige einer speziellen Nachricht behandelt. Du kannst diese Funktion testen, indem du den unten stehenden Shortcode zu einem beliebigen Beitrag oder einer Seite hinzufügst.

<?php
/**
* Plugin Name: OOP Shortcode Handler
* Description: Handles a custom shortcode with OOP.
* Version: 1.0
* Author: Name
*/

class OOPShortcodeHandler {
    public function __construct() {
        add_shortcode('oop_message', array($this, 'displayCustomMessage'));
    }

    public function displayCustomMessage($atts) {
        $attributes = shortcode_atts(['message' => 'Hello, this is your OOP     
message!'], $atts);
        return "<div>{$attributes['message']}</div>";
    }
}

new OOPShortcodeHandler();

Speichere ihn als my-oop-shortcode-handler.php im Verzeichnis wp-content/plugins. Aktiviere schließlich das Plugin.

Screenshot der Seite Plugins. Oben auf der Seite gibt es eine Schaltfläche Neues Plugin hinzufügen. Darunter befindet sich eine Liste von Plugins. My OOP Shortcode Handler ist aufgelistet und aktiv
Der My OOP Shortcode Handler wird auf der Plugins-Seite angezeigt

Verwende dann im Seiten- oder Beitragseditor vor dem Veröffentlichen oder Aktualisieren die Shortcodes [oop_message] und [oop_message message="Custom Message Here"], wie unten gezeigt:

Screenshot der Beispielseite. Er zeigt die Codeschnipsel "[oop_message]" und "[oop_message message="Benutzerdefinierte Nachricht hier"]", gefolgt von dem Text "Dies ist eine Beispielseite. Sie unterscheidet sich von einem Blogbeitrag, weil sie an einem Ort bleibt und in der Navigation deiner Website angezeigt wird (in den meisten Themes). Die meisten fangen mit einer Über-Seite an, auf der sie sich potenziellen Besuchern der Website vorstellen. Sie könnte etwa so lauten.
Die Beispielseite im Bearbeitungsmodus mit der hinzugefügten benutzerdefinierten Shortcode-Meldung
Nach dem Veröffentlichen oder Aktualisieren der Seite/des Beitrags siehst du die Meldung, die die angezeigten Shortcodes bezeichnen.

Screenshot of the Sample Page. It displays two messages:
Die veröffentlichte Beispielseite mit der angezeigten Nachricht über den benutzerdefinierten Shortcode.

OOP in WordPress-Widgets: Widget für dynamische Inhalte

OOP ist auch für Widgets von Vorteil, da ihre Funktionalität in Klassen gekapselt wird. Der WordPress-Kern selbst verwendet OOP für Widgets. Hier erstellst du ein benutzerdefiniertes Widget, mit dem du dynamische Inhalte mit einem Titel und einem Textbereich anzeigen kannst.

Füge den folgenden Code in die Datei functions.php deines Themes oder in ein Plugin ein. Er definiert ein benutzerdefiniertes Widget, das die Nachricht „Hello World From My Custom Widget!“ anzeigt

class My_Custom_Widget extends WP_Widget {

    public function __construct() {
        parent::__construct(
            'my_custom_widget', // Base ID
            'My Custom Widget', // Name
            array('description' => __('A simple custom widget.', 
'text_domain'),) // Args
        );
    }

    public function widget($args, $instance) {
        echo $args['before_widget'];
        if (!empty($instance['title'])) {
            echo $args['before_title'] . apply_filters('widget_title',  
$instance['title']) . $args['after_title'];
        }
        // Widget content
        echo __('Hello World From My Custom Widget!', 'text_domain');
        echo $args['after_widget'];
    }

    public function form($instance) {
        // Form in WordPress admin
    }

    public function update($new_instance, $old_instance) {
        // Processes widget options to be saved
    }
}

function register_my_custom_widget() {
    register_widget('My_Custom_Widget');
}
add_action('widgets_init', 'register_my_custom_widget');

Bei der Bearbeitung des aktiven Themes über den Link Anpassen unter dem Erscheinungsbild im Admin-Bereich kannst du bei Bedarf ein neues benutzerdefiniertes Widget hinzufügen.

Screenshot der Landing Page der WordPress-Website. Auf der linken Seite der Seite gibt es ein Menü mit den letzten Beiträgen und Kommentaren sowie eine Schaltfläche Aktivieren & Veröffentlichen
Die Einstellung des benutzerdefinierten Widgets in der Seitenleiste und die Verwendung des Widgets auf einer Beispielseite

Verwendung von WordPress-Klassen

WordPress stellt verschiedene Klassen zur Verfügung, die du verwenden kannst, um mit den Kernfunktionen des CMS zu interagieren. Zwei dieser Klassen sind WP_User und WP_Post, die Benutzer bzw. Beiträge darstellen.

Erweitere das WordPress-Plugin-Beispiel von oben und verwende diese Klassen, um einen Shortcode zu erstellen, der Informationen über den Autor eines Beitrags und Details über den Beitrag selbst anzeigt.

Speichere ihn als my-oop-shortcode-handler-extended.php im Verzeichnis wp-content/plugins. Aktiviere schließlich das Plugin.

<?php
/**
* Plugin Name: Extended OOP Shortcode Handler
* Description: Extends the shortcode handler to display post and author 
information.
* Version: 1.1
* Author: Your Name
*/

class ExtendedOOPShortcodeHandler {
    public function __construct() {
        add_shortcode('post_author_details', array($this,   
'displayPostAuthorDetails'));
    }

    public function displayPostAuthorDetails($atts) {
        global $post; // Accessing the global $post object to get current post  
details

        $attributes = shortcode_atts([
            'post_id' => $post->ID, // Default to the current post ID
        ], $atts);

        $postDetails = get_post($attributes['post_id']); // Getting the WP_Post  
object
        if (!$postDetails) {
            return "Post not found.";
        }

        $authorDetails = new WP_User($postDetails->post_author); // Getting the 
WP_User object

        $output = "<div class='post-author-details'>";
        $output .= "<h2>Author Information</h2>";
        $output .= "<p>Name: " . esc_html($authorDetails->display_name) . 
"</p>";
        $output .= "<h2>Post Information</h2>";
        $output .= "<p>Title: " . esc_html($postDetails->post_title) . "</p>";
        $output .= "<p>Content: " . 
esc_html(wp_trim_words($postDetails->post_content, 20, '...')) . "</p>";
        $output .= "</div>";

        return $output;
    }
}

new ExtendedOOPShortcodeHandler();

In dieser erweiterten Version hast du einen Shortcode erstellt: [post_author_details post_id="1"].

Screenshot der Beispielseite. Sie öffnet sich mit dem Codeschnipsel "[post_author_details post_id="1"]", unter dem der Text "Dies ist der Rest des Artikels..." steht. Darunter steht die Meldung "Tippe / um einen Block auszuwählen".
Die Beispielseite im Bearbeitungsmodus mit der erweiterten benutzerdefinierten Shortcode-Meldung
Wenn sie zu einem Beitrag oder einer Seite hinzugefügt wird, zeigt sie Details über den Autor des Beitrags (mit der Klasse WP_User ) und den Beitrag selbst (mit der Klasse WP_Post ) an.

OOP und die WordPress REST API

Die WordPress REST API ist eine moderne Ergänzung zu WordPress, mit der du auf programmierbare Weise mit den Daten der Website interagieren kannst. Sie nutzt OOP in großem Umfang und verwendet Klassen, um die Endpunkte, Antworten und die Bearbeitung von Anfragen zu definieren. Dies ist eine klare Abkehr von den traditionellen prozeduralen Wurzeln und eine Hinwendung zu OOP.

Im Gegensatz zu den OOP-Prinzipien ist ein Großteil des WordPress-Kerns, insbesondere die früheren Komponenten wie die Themes- und Plugin-API, in einem prozeduralen Programmierstil geschrieben.

Während ein prozeduraler Ansatz zum Beispiel globale Variablen direkt manipuliert und sich auf eine Folge von Funktionen für Aufgaben verlässt, kapselt OOP in der REST-API die Logik in Klassen. Daher übernehmen bestimmte Methoden innerhalb dieser Klassen Aufgaben wie das Abrufen, Erstellen, Aktualisieren oder Löschen von Beiträgen.

Dadurch werden die Aufgaben klar voneinander getrennt und die Codebasis lässt sich leichter erweitern und debuggen.

Durch Klassen, die Endpunkte definieren und Anfragen bearbeiten, wie z. B. das Abrufen von Beiträgen mit einer GET /wp-json/wp/v2/posts Anfrage, bietet die REST-API eine strukturierte, skalierbare Möglichkeit, mit WordPress-Daten zu interagieren und JSON-formatierte Antworten zurückzugeben.

Nutzung von Kinsta für PHP- und WordPress-Hosting

Die Hosting-Lösungen von Kinsta helfen bei der Optimierung von PHP-Anwendungen und der Verwaltung von WordPress-Hosting, wobei sowohl traditionelle PHP-Setups als auch WordPress-spezifische Anforderungen berücksichtigt werden. Mit einer robusten Infrastruktur, die auf Spitzentechnologien wie Google Cloud aufbaut, ermöglicht Kinsta eine unvergleichliche Leistung und Skalierbarkeit für OOP-basierte PHP-Anwendungen.

Für WordPress-Websites bietet der spezielle WordPress-Hosting-Dienst von Kinsta Funktionen wie automatische Updates, Sicherheitsüberwachung und Experten-Support. Er garantiert eine problemlose Verwaltung und eine hervorragende Leistung und ist damit für Entwickler und Unternehmen gleichermaßen ideal.

Zusammenfassung

Wie du in diesem Artikel gesehen hast, bietet OOP unvergleichliche Flexibilität, Skalierbarkeit und Wartungsfreundlichkeit bei der Entwicklung von PHP und WordPress.

Als führender Managed-WordPress-Hosting-Anbieter hat Kinsta diesen Bedarf erkannt und bietet maßgeschneiderte Lösungen, um Entwickler wie dich bei deinen OOP-PHP-Bestrebungen zu unterstützen. Deshalb sind unsere Anwendungs– und WordPress-Hosting-Lösungen so konzipiert, dass sie dich bei der Entwicklung performanter, skalierbarer, OOP-basierter WordPress-Projekte unterstützen.

Teste Kinsta noch heute und finde heraus, wie wir dir helfen können, erstklassige WordPress-Seiten zu erstellen!

Hast du die Vorteile von OOP schon in deinen Projekten erlebt? Oder bist du neugierig, wie es deinen Entwicklungsprozess verändern kann? Teile es uns in den Kommentaren unten mit.

Jeremy Holcombe Kinsta

Content & Marketing Editor bei Kinsta, WordPress Web Developer und Content Writer. Außerhalb von WordPress genieße ich den Strand, Golf und Filme. Außerdem habe ich Probleme mit großen Menschen ;).