Fibres
Aperçu des fibres
(PHP 8 >= 8.1.0)
Les fibres représentent des fonctions interruptibles sur toute la pile. Les fibres peuvent être suspendues à n'importe quel endroit de la pile d'appels, en interrompant l'exécution à l'intérieur de la fibre jusqu'à ce que la fibre soit reprise ultérieurement.
Les fibres mettent en pause l'ensemble de la pile d'exécution, de sorte que l'appelant direct de la fonction n'a pas besoin de modifier la façon dont il invoque la fonction.
L'exécution peut être interrompue n'importe où dans la pile d'appels en utilisant Fiber::suspend() (c'est-à-dire que l'appel à Fiber::suspend() peut se trouver dans une fonction profondément imbriquée ou ne pas exister du tout).
Contrairement aux Generator n'ayant pas de pile, chaque Fiber possède sa propre pile d'appels, ce qui leur permet d'être mises en pause dans des appels de fonctions profondément imbriquées. Une fonction déclarant un point d'interruption (c'est-à-dire appelant Fiber::suspend()) n'a pas besoin de changer son type de retour, contrairement à une fonction utilisant yield qui doit retourner une instance de Generator.
Les fibres peuvent être suspendues dans n'importe quel appel de fonction, y compris celles appelées à l'intérieur de la VM PHP, comme les fonctions fournies à array_map() ou les méthodes appelées par foreach sur un objet Iterator.
Une fois suspendue, l'exécution de la fibre peut être reprise avec n'importe quelle valeur en utilisant Fiber::resume() ou en lançant une exception dans la fibre à l'aide de Fiber::throw(). La valeur est renvoyée (ou l'exception lancée) par Fiber::suspend().
Note: En raison des limitations actuelles, il n'est pas possible de changer de fibre dans le destructeur d'un objet.
Exemple #1 Utilisation de base
<?php
$fiber = new Fiber(function (): void {
$value = Fiber::suspend('fiber');
echo "Valeur utilisée pour reprendre la fibre: ", $value, PHP_EOL;
});
$value = $fiber->start();
echo "Valeur de la suspension de la fibre: ", $value, PHP_EOL;
$fiber->resume('test');
?>
L'exemple ci-dessus va afficher :
Valeur de la suspension de la fibre: fiber Valeur utilisée pour reprendre la fibre: test
Version en cache
25/12/2024 19:03:25 Cette version de la page est en cache (à la date du 25/12/2024 19:03:25) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-language.fibers.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.