Wenn Ihr PHP-Code mehr als nur ein Skript ist
\n\nHaben Sie schon einmal ein PHP-Skript gestartet, das tausende E-Mails verarbeitet hat, und eine Minute gewartet, bis es fertig war? Oder versucht, einen Chat mit nacktem PHP zu bauen, und festgestellt, dass dies ohne ständiges Neuladen der Seite unmöglich ist? Wenn ja, dann sind Sie bereits auf die Grenzen des traditionellen synchronen Ansatzes gestoßen.
\n\nEvent-driven Architektur in PHP ist nicht nur ein modischer Begriff aus der Node.js-Welt. Es ist eine echte Möglichkeit, Ihren Code schneller, reaktionsfähiger und skalierbarer zu machen. In diesem Artikel schauen wir uns an, wie ereignisgesteuerte Programmierung in PHP funktioniert, schreiben einige praktische Beispiele und verstehen, wann sie wirklich nötig ist.
\n\nWas ist Event-driven Architektur einfach erklärt
\n\nStellen Sie sich ein Büro vor, in dem jeder Mitarbeiter streng nach Anleitung arbeitet: „Mach A, dann B, dann C“. Das ist synchroner Code. Stellen Sie sich nun ein Büro vor, in dem Mitarbeiter auf Ereignisse reagieren: „Wenn eine E-Mail kommt – antworte darauf“, „Wenn eine Bestellung aufgegeben wurde – sende eine Benachrichtigung“. Das ist ereignisgesteuerte Architektur.
\n\nIn der Event-driven Architektur in PHP wird das Programm nicht linear ausgeführt. Stattdessen wartet es auf Ereignisse (Klick, Anfrage, Timer, Aufgabenabschluss) und reagiert darauf. Die Hauptkomponente hier ist der Event Loop (Ereignisschleife), der ständig prüft, ob etwas passiert ist, und die entsprechenden Handler ausführt.
\n\nWarum PHP-Entwickler darauf achten sollten
\n\nLange Zeit wurde PHP ausschließlich mit synchroner Ausführung assoziiert: Anfrage kommt – Skript läuft – Antwort wird gesendet. Aber mit dem Aufkommen von Bibliotheken wie ReactPHP und Amp hat sich alles geändert. Jetzt können Sie:
\n\n- \n
- Tausende von WebSocket-Verbindungen gleichzeitig verwalten \n
- Hintergrundaufgaben ohne Warteschlangen wie RabbitMQ ausführen \n
- Echte Microservices in reinem PHP bauen \n
- Asynchrone HTTP-Clients und -Server schreiben \n
Und das alles – ohne die Sprache zu wechseln oder die gesamte Codebasis neu zu schreiben.
\n\nDie Hauptkomponenten der Event-driven Architektur
\n\nBevor wir Code schreiben, lassen Sie uns die Schlüsselkonzepte verstehen. In jedem ereignisgesteuerten System in PHP gibt es drei Hauptelemente:
\n\n- \n
- Event Loop – eine Endlosschleife, die auf Ereignisse lauscht (Timer, Sockets, Signale) und sie an die Handler weiterleitet. \n
- Emitter/Dispatcher – ein Objekt, das Ereignisse erzeugt und sendet. \n
- Listener/Handler – eine Funktion oder Methode, die auf ein bestimmtes Ereignis reagiert. \n
Im klassischen PHP würden Sie schreiben: file_get_contents('https://api.example.com') – und auf die Antwort warten. Im Event-driven Ansatz abonnieren Sie das Ereignis „Daten empfangen“ und führen weiterhin anderen Code aus.
Beispiel 1: Einfacher Event Dispatcher in reinem PHP
\n\nLassen Sie uns einen einfachen Event Dispatcher ohne externe Bibliotheken implementieren. Das hilft, das Wesen der ereignisgesteuerten Programmierung in PHP zu verstehen.
\n\n<?php\n\nclass EventDispatcher {\n private array $listeners = [];\n\n public function addListener(string $eventName, callable $listener): void {\n $this->listeners[$eventName][] = $listener;\n }\n\n public function dispatch(string $eventName, mixed $data = null): void {\n if (!isset($this->listeners[$eventName])) {\n return;\n }\n foreach ($this->listeners[$eventName] as $listener) {\n call_user_func($listener, $data);\n }\n }\n}\n\n// Verwendung\n$dispatcher = new EventDispatcher();\n\n$dispatcher->addListener('user.registered', function ($userData) {\n echo "Sende Willkommens-E-Mail an {$userData['email']}\\n";\n});\n\n$dispatcher->addListener('user.registered', function ($userData) {\n echo "Protokolliere Benutzerregistrierung von {$userDa