Fibers
Fibers
Översikt över Fibers
(PHP 8 >= 8.1.0)
Fibers representerar fullstack, avbrytbara funktioner. Fibers kan pausas från vilken plats som helst i anropsstacken, vilket stoppar körningen inom fibern tills fibern återupptas vid ett senare tillfälle.
Fibers pausar hela exekveringsstacken, så den direkta anroparen av funktionen behöver inte ändra hur den anropar funktionen.
Körningen kan avbrytas var som helst i anropsstacken med Fiber::suspend() (det vill säga anropet till Fiber::suspend() kan finnas i en djupt nästlad funktion eller kanske inte existera alls).
Till skillnad från stack-lösa Generators har varje Fiber sin egen anropsstack, vilket gör att de kan pausas inom djupt nästlade funktionsanrop. En funktion som deklarerar en avbrottspunkt (det vill säga anropar Fiber::suspend()) behöver inte ändra sin returtyp, till skillnad från en funktion som använder yield och måste returnera en Generator-instans.
Fibers kan pausas i vilket funktionsanrop som helst, inklusive de som anropas från PHP VM, såsom funktioner som tillhandahålls till array_map() eller metoder som anropas av foreach på ett Iterator-objekt.
När en fiber har pausats kan körningen av fibern återupptas med vilket värde som helst med hjälp av Fiber::resume() eller genom att kasta ett undantag in i fibern med Fiber::throw(). Värdet returneras (eller undantaget kastas) från Fiber::suspend().
Notera: På grund av nuvarande begränsningar är det inte möjligt att byta fiber i destruktorn av ett objekt.
Exempel #1 Grundläggande användning
<?php $fiber = new Fiber(function (): void { $value = Fiber::suspend('fiber'); echo "Värde som användes för att återuppta fiber: ", $value, PHP_EOL; }); $value = $fiber->start(); echo "Värde från fibersuspendering: ", $value, PHP_EOL; $fiber->resume('test'); ?>
Ovanstående exempel kommer att producera:
Värde från fibersuspendering: fiber Värde som användes för att återuppta fiber: test
Sidslut
Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.fibers.php
PHP
Språkreferens
Språkreferens#Fibers
Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/