Signatur
Beschreibung
ReflectionFiber ist Teil der PHP-Reflection-API und erlaubt es, zur Laufzeit Informationen über ein Fiber-Objekt abzufragen. Fibers sind leichtgewichtige kooperative Nebenläufigkeitsprimitive, die in PHP 8.1 eingeführt wurden. Mit ReflectionFiber kann man den Zustand eines Fibers (gestartet, laufend, suspendiert, beendet) und seinen aktuellen Ausführungskontext inspizieren.
Ein typischer Anwendungsfall ist das Debugging und Monitoring von asynchronem oder event-loop-gesteuertem Code, bei dem mehrere Fibers gleichzeitig existieren und man deren Stack-Traces oder Zustände programmatisch auswerten möchte. Bibliotheken wie Revolt oder Amp nutzen diese Möglichkeiten intern für Diagnose-Werkzeuge.
Die Klasse bietet Methoden wie getCallable(), um die dem Fiber zugrunde liegende Callback-Funktion abzurufen, sowie getTrace() für den vollständigen Stack-Trace des suspendierten Fibers. Mit den Methoden isStarted(), isRunning(), isSuspended() und isTerminated() lässt sich der aktuelle Lebenszyklusstatus abfragen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $fiber Pflicht | Fiber | Das Fiber-Objekt, über das Informationen abgerufen werden sollen. |
Beispiele
Fiber-Zustand und Stack-Trace inspizieren
<?php
$fiber = new Fiber(function (): void {
$value = Fiber::suspend('suspendiert');
echo "Fiber fortgesetzt mit: " . $value . PHP_EOL;
});
// Fiber starten – er suspendiert sich sofort
$fiber->start();
$reflection = new ReflectionFiber($fiber);
var_dump($reflection->isStarted()); // true
var_dump($reflection->isSuspended()); // true
var_dump($reflection->isRunning()); // false
var_dump($reflection->isTerminated()); // false
// Stack-Trace des suspendierten Fibers ausgeben
print_r($reflection->getTrace());
// Fiber fortsetzen
$fiber->resume('Hallo');
var_dump($reflection->isTerminated()); // true
Callable des Fibers abrufen
<?php
function meineAufgabe(): void {
Fiber::suspend();
}
$fiber = new Fiber('meineAufgabe');
$fiber->start();
$reflection = new ReflectionFiber($fiber);
$callable = $reflection->getCallable();
// Gibt den Namen der Callback-Funktion aus
echo $callable; // meineAufgabe
// Wichtig · Fallstricke
Hinweis: getTrace() und getExecutingFile()/getExecutingLine() liefern nur dann sinnvolle Ergebnisse, wenn der Fiber tatsächlich suspendiert ist. Wird versucht, diese Methoden auf einem noch nicht gestarteten oder bereits beendeten Fiber aufzurufen, wird eine \ReflectionException ausgelöst.
ReflectionFiber ist primär für Debugging- und Monitoring-Szenarien gedacht. Im produktiven Anwendungscode sollte die direkte Fiber-API bevorzugt werden.