php/e23fiber.php

<html>
<h2><?php echo basename(__file__); ?> PHP redir stdout, achtung läuft nur in CLI!!!</h3>
<?php 
require_once('env.php');
outBegin();


function res($lv) {
    global $nx;
    out("fiber res $lv begin, suspending");
    $val = $nx("res lv $lv");
    out("fiber res $lv suspend got $val");
    if ($val !== false)    
        res($lv+1);
    out("fiber res $lv got $val returning");
}

$nxIt = [1,2,99];
function nxIt($a) {
    global $nxIt;
    if (false !== $cu = current($nxIt))
        next($nxIt);
    return $cu;
}

function nxFib($a) {
    return ('return' === $r = Fiber::suspend($a)) ? false : $r;
}

outH('with iterator');
$nx = 'nxIt';
res(0);

outH('with fiber');
$nx = 'nxFib';
$fiber = new Fiber(fn () => res(0));

out("main starting");
out("main start got", $fiber->start());
out("main resuming(rEins)");
out("main resume(rEins) got", $fiber->resume('rEins'));
out("main resuming(rZwei)");
out("main resume(rZwei) got", $fiber->resume('rZwei'));
out("main resuming(return)");
out("main resume(return) got", $fiber->resume('return'));
outEnd(__file__);
?>