Entwurfsmuster in PHP: Beispiele und Anwendung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Entwurfsmuster in PHP: Was sie sind und warum Sie sie brauchen



Entwurfsmuster sind bewährte Lösungen für typische Probleme der objektorientierten Programmierung. Sie sind kein fertiger Code, sondern vielmehr Vorlagen, die an eine bestimmte Situation angepasst werden können. In PHP sind Muster besonders nützlich, um skalierbare und wartbare Webanwendungen zu erstellen.



In diesem Artikel behandeln wir drei Hauptmuster: Singleton, Factory und Observer. Für jedes werden wir reale PHP-Beispiele liefern und erklären, in welchen Situationen sie verwendet werden sollten.



Warum Entwurfsmuster in PHP lernen?

  • Vereinfachung des Codes — ein einheitlicher Ansatz zur Lösung von Problemen.
  • Wiederverwendbarkeit — Muster lassen sich leicht an verschiedene Projekte anpassen.
  • Einfache Wartung — Code wird für andere Entwickler verständlich.
  • Testbarkeit — die Verwendung von Mustern vereinfacht das Schreiben von Unit-Tests.


1. Singleton-Muster



Singleton stellt sicher, dass eine Klasse nur eine einzige Instanz hat und bietet einen globalen Zugriffspunkt darauf. In PHP wird dies oft für Datenbankverbindungen, Protokollierung oder Konfiguration verwendet.



Beispiel: Datenbank-Klasse



<?phpclass Database {    private static ?Database $instance = null;    private PDO $connection;

private function __construct() { // Datenbankverbindung (SQLite-Beispiel) $this->connection = new PDO('sqlite:example.db'); $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }

public static function getInstance(): Database { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; }

public function getConnection(): PDO { return $this->connection; }

// Klonen und Deserialisierung verhindern private function __clone() {} public function __wakeup() { throw new \\Exception("Cannot unserialize singleton"); }}

// Verwendung$db = Database::getInstance();$pdo = $db->getConnection();?>


Wann sollte man Singleton verwenden?

  • Wenn genau eine Instanz einer Klasse benötigt wird (z. B. Datenbankverbindung).
  • Für den globalen Zugriff auf eine Ressource (Logger, Cache).
  • In Situationen, in denen das Erstellen mehrerer Instanzen zu Konflikten führen würde.


Nachteile: Verstößt gegen das Single-Responsibility-Prinzip und erschwert das Testen (erzeugt globalen Zustand).



2. Factory-Muster



Die Factory-Methode definiert eine Schnittstelle zum Erstellen eines Objekts, erlaubt es Unterklassen jedoch, den Typ des zu erstellenden Objekts zu ändern. Dies ist nützlich, wenn der Objekttyp nicht im Voraus bekannt ist oder sich ändern kann.



Beispiel: Benachrichtigungs-Factory



<?php// Schnittstelle für alle Benachrichtigungstypeninterface Notification {    public function send(string $message): void;}

// Konkrete Implementierungenclass EmailNotification implements Notification { public function send(string $message): void { echo "Sende E-Mail: {$message}"; }}

class SMSNotification implements Notification { public function send(string $message): void { echo "Sende SMS: {$message}"; }}

// Factoryclass NotificationFactory { public static function create(string $type): Notification { return match ($type) { 'email' => new EmailNotification(), 'sms' => new SMSNotification(), default => throw new \\InvalidArgumentException("Unbekannter Typ: {$type}"), }; }}

// Verwendung$notification = NotificationFactory::create('email');$notifica

Blogs

Buchempfehlungen