# Fibers

### Descripción general de Fibers

(PHP 8 >= 8.1.0)

Los Fibers representan funciones de pila completa e interrumpibles. Los Fibers pueden suspenderse desde cualquier lugar en la pila de llamadas, pausando su ejecución dentro del Fiber hasta que se reanude más tarde.

Los Fibers pausan toda la pila de ejecución, por lo que el llamador directo de la función no necesita cambiar la forma en que invoca la función

La ejecución puede interrumpirse en cualquier lugar de la pila de llamadas utilizando Fiber::suspend() (es decir, la llamada a Fiber::suspend() puede estar en una función profundamente anidada o incluso no existir en absoluto)

A diferencia de los Generators sin pila, cada Fiber tiene su propia pila de llamadas, lo que permite que se pausen dentro de llamadas a funciones profundamente anidadas. Una función que declara un punto de interrupción (es decir, que llama a Fiber::suspend()) no necesita cambiar su tipo de retorno, a diferencia de una función que utiliza `yield` y debe devolver una instancia de Generator.

Los Fibers pueden suspenderse en cualquier llamada a función, incluidas aquellas realizadas desde la Máquina Virtual de PHP, como las funciones proporcionadas a array_map() o los métodos llamados por `foreach` en un objeto Iterator.

Una vez suspendido, la ejecución del Fiber puede reanudarse con cualquier valor utilizando Fiber::resume() o lanzando una excepción en el Fiber utilizando Fiber::throw(). El valor se devuelve (o la excepción se lanza) desde Fiber::suspend().

> Nota: Antes de PHP 8.4.0, no se permitía cambiar Fibers durante la ejecución de un destructor de objeto.

Ejemplo #1 Uso básico

    <?php
    $fiber = new Fiber(function (): void {
       $value = Fiber::suspend('fiber');
       echo "Valor utilizado para reanudar el Fiber: ", $value, PHP_EOL;
    });

    $value = $fiber->start();

    echo "Valor del Fiber al suspenderse: ", $value, PHP_EOL;

    $fiber->resume('test');
    ?>

El ejemplo anterior mostrará:

    Valor del Fiber al suspenderse: fiber
    Valor utilizado para reanudar el Fiber: test

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open