Les Fibers, introduites dans PHP en novembre 2021, sont une primitive bas niveau permettant un mécanisme de stack switch coopératif, souvent comparé à une suspension d'appel téléphonique où l'état complet (variables, pile d'appels) est préservé. Contrairement aux generators, elles permettent à n'importe quelle fonction, à n'importe quelle profondeur d'appel, de suspendre l'exécution via Fiber::suspend(), sans nécessiter une propagation manuelle du yield. Cette caractéristique est cruciale pour les bibliothèques asynchrones comme Amphp ou ReactPHP, qui encapsulent les Fibers pour offrir une API synchrone à l'utilisateur final, évitant ainsi le problème des colored functions.
Bien que souvent associées à tort au multi-threading ou à l'asynchrone pur, les Fibers restent mono-threadées et ne gèrent pas elles-mêmes les opérations d'entrée/sortie. Leur rôle se limite à fournir un outil de contrôle d'exécution précis, laissant aux bibliothèques le soin de gérer les attentes (sockets, timers, etc.). Leur minimalisme et leur explicitement en font une solution puissante mais peu visible dans le code applicatif classique, où elles opèrent en coulisses.
L'API des Fibers, volontairement épurée, repose sur quelques méthodes clés : Fiber::__construct(), Fiber::start(), Fiber::suspend() et Fiber::resume(). Cette simplicité reflète leur nature de mécanisme brut, conçu pour être intégré dans des couches d'abstraction supérieures plutôt que directement utilisé par les développeurs. Leur adoption discrète dans des frameworks comme Symfony s'explique par cette philosophie de conception.
PHP 8.1 apporte des améliorations significatives pour rendre le code plus sûr et élégant. Parmi les nouveautés, les enums natifs permettent des vérifications de type robustes et des fonctionnalités avancées comme des méthodes et de la logique métier. Les propriétés readonly simplifient l'immutabilité en permettant une assignation unique dans le constructeur, combinée à la promotion de propriétés pour un code concis. Ces évolutions illustrent l'affinement continu du langage.
L'article explique que PHP, traditionnellement synchrone, peut optimiser des tâches comme les requêtes SQL en les exécutant de manière asynchrone. Cela permet de lancer des opérations non bloquantes, comme des requêtes de base de données ou des lectures de fichiers, pendant que d'autres tâches sont traitées. PHP a introduit des fonctionnalités asynchrones dès la version 4.3 avec les streams, et a évolué avec les générateurs en PHP 5.5 et les fibers en PHP 8.1, permettant une meilleure gestion des coroutines. L'EventLoop est présenté comme un modèle efficace pour gérer plusieurs opérations asynchrones en utilisant des callbacks, bien que cela puisse mener à un "callback hell". Les promesses sont proposées comme solution pour simplifier la gestion asynchrone, transformant les callbacks imbriqués en une chaîne de promesses plus lisible. Enfin, l'article compare des bibliothèques comme ReactPHP et Amp pour la gestion des promesses et des coroutines, recommandant ReactPHP pour les promesses et Amp pour une approche plus naturelle avec les coroutines, tout en suggérant Revolt pour l'EventLoop.
Une fonctionnalité introduite en PHP 8.1 pour la programmation concurrente : les "Fibers' L'auteur les présente et donne un exemple via une limitation d'usage API