Fibers
Fibers
Overzicht van Fibers
Fibers vertegenwoordigen volledige, onderbreekbare functies. Fibers kunnen op elk moment in de call-stack worden gepauzeerd, waarbij de uitvoering binnen de fiber wordt gepauzeerd totdat de fiber op een later tijdstip wordt hervat.
Fibers pauzeren de gehele uitvoeringsstack, zodat de directe aanroeper van de functie niet hoeft te veranderen hoe deze de functie aanroept.
De uitvoering kan op elk punt in de call stack worden onderbroken met
(dat wil zeggen, de aanroep kan zich in een diep geneste functie bevinden of helemaal niet bestaan).
Fiber::suspend``Fiber::suspend
In tegenstelling tot stack-loze generators, heeft elke fiber zijn eigen call stack, waardoor ze kunnen worden gepauzeerd binnen diep geneste functieaanroepen. Een functie die een onderbrekingspunt declareert (dat wil zeggen, die Fiber::suspend aanroept) hoeft zijn returntype niet te veranderen, in tegenstelling tot een functie die yield gebruikt, die een Generator instantie moet retourneren.
Generator``Fiber``Fiber::suspend``Generator
Fibers kunnen in elke functieaanroep worden gepauzeerd, inclusief die welke vanuit de PHP VM worden aangeroepen, zoals functies die aan array_map worden gegeven of methoden die door foreach op een Iterator object worden aangeroepen.
array_map``Iterator
Zodra gepauzeerd, kan de uitvoering van de fiber worden hervat met een willekeurige waarde met Fiber::resume of door een uitzondering in de fiber te gooien met Fiber::throw. De waarde wordt geretourneerd (of de uitzondering gegooid) vanuit Fiber::suspend.
Fiber::resume``Fiber::throw``Fiber::suspend
Opmerking: > Voor PHP 8.4.0 was het niet toegestaan om fibers te wisselen tijdens de uitvoering van een object destructor.
Voorbeeld: Basisgebruik
<?php
$fiber = new Fiber(function (): void {
$value = Fiber::suspend('fiber');
echo "Value used to resume fiber: ", $value, PHP_EOL;
});
$value = $fiber->start();
echo "Value from fiber suspending: ", $value, PHP_EOL;
$fiber->resume('test');
?>
Value from fiber suspending: fiber
Value used to resume fiber: test