GuzzleHTTP/Promises für PHP: Komplette Anleitung mit Beispielen

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

GuzzleHTTP/Promises für PHP: Komplette Anleitung mit Beispielen

Willkommen zur ausführlichen Anleitung zur Bibliothek GuzzleHTTP/Promises für PHP. Diese Bibliothek ist ein zentraler Bestandteil des Guzzle-Ökosystems und bietet eine leistungsstarke Implementierung des Promise-Patterns für asynchrone Programmierung. Wenn Sie mit HTTP-Anfragen, parallelen Aufgaben arbeiten oder Ihren PHP-Code effizienter und lesbarer gestalten möchten, ist dieser Artikel genau das Richtige für Sie.

1. Was ist GuzzleHTTP/Promises und warum wird es benötigt?

GuzzleHTTP/Promises ist eine PHP-Bibliothek, die das Konzept von Promises und asynchroner Aufgabenausführung umsetzt. Sie ist Teil des Guzzle-Ökosystems, kann aber völlig unabhängig vom HTTP-Client verwendet werden. Die Grundidee von Promises besteht darin, ein Objekt zu erstellen, das das Ergebnis einer asynchronen Operation repräsentiert – dieses Ergebnis kann sofort, später oder gar nicht verfügbar sein. Dies ermöglicht Code, der die Programmausführung nicht blockiert, während auf langwierige Operationen gewartet wird.

Warum ist das in PHP wichtig? Traditionell ist PHP eine synchrone Sprache, in der jede Operation nacheinander ausgeführt wird. Mit der zunehmenden Verbreitung von Microservices, API-Integrationen und der Arbeit mit externen Diensten entstand jedoch der Bedarf an effizienter Verwaltung paralleler Aufgaben. GuzzleHTTP/Promises löst dieses Problem, indem es ermöglicht, mehrere Operationen gleichzeitig zu starten (z. B. mehrere HTTP-Anfragen an verschiedene APIs) und deren Ergebnisse zu verarbeiten, sobald sie fertig sind, ohne auf die sequenzielle Ausführung aller warten zu müssen.

Die Bibliothek bietet ein vollständiges Toolkit für die Arbeit mit asynchronem Code: Erstellung von Promises, deren Kombination, Methodenverkettung, Fehlerbehandlung und Timeout-Management. Sie ist der De-facto-Standard für asynchrone Arbeit in der PHP-Community und wird in beliebten Projekten wie Laravel, Symfony, WordPress (über Plugins) und natürlich dem Guzzle HTTP-Client selbst verwendet.

2. Installation

Die Installation der Bibliothek erfolgt über Composer, den Standard-Paketmanager für PHP. Führen Sie folgenden Befehl im Terminal im Stammverzeichnis Ihres Projekts aus:

composer require guzzlehttp/promises

Wenn Sie den Guzzle HTTP-Client verwenden, ist die Promises-Bibliothek bereits in dessen Abhängigkeiten enthalten, und eine separate Installation ist nicht erforderlich. Stellen Sie nach der Installation sicher, dass die Datei vendor/autoload.php in Ihrem Skript eingebunden ist:

require 'vendor/autoload.php';

3. Schnellstart – Minimales funktionsfähiges Beispiel

Erstellen wir ein einfaches Beispiel für die Arbeit mit Promises. Wir erstellen ein Promise, das nach 1 Sekunde "aufgelöst" wird und den String "Hallo, Welt!" zurückgibt:

use GuzzleHttp\Promise\Promise;
use GuzzleHttp\Promise\Utils;

// Neues Promise erstellen
$promise = new Promise(function () use (&$promise) {
    // Simulation einer asynchronen Operation
    usleep(1000000); // 1 Sekunde
    $promise->resolve('Hallo, Welt!');
});

// Handler für erfolgreiche Ausführung hinzufügen
$promise->then(function ($value) {
    echo "Erhalten: " . $value . PHP_EOL;
});

// Ausführung des Promises starten
Utils::queue()->add(function () use ($promise) {
    $promise->wait();
});

// Warteschlange ausführen
Utils::queue()->run();

Dieses Beispiel zeigt die grundlegende Mechanik: Erstellung eines Promises, dessen Auflösung (resolve) und die Verarbeitung des Ergebnisses über die then-Methode.

4. Wichtige Methoden/Funktionen/Klassen

Im Folgenden werden 8+ Schlüsselkomponenten der Bibliothek mit detaillierten Beschreibungen und Beispielen vorgestellt.

4.1. Die Klasse GuzzleHttp\Promise\Promise

Signatur: new Promise(callable $waitFn = null, callable $canceller = null)

Funktion: Erstellt ein neues Promise. Optional kann eine Wartefunktion ($waitFn) übergeben werden, die beim Aufruf von wait() ausgeführt wird, sowie eine Abbruchfunktion ($canceller).

Empfehlungen