e23fiber.php PHP redir stdout, achtung läuft nur in CLI!!!

e23fiber.php

e23fiber.php

with iterator

fiber res 0 begin, suspending
fiber res 0 suspend got 1
fiber res 1 begin, suspending
fiber res 1 suspend got 2
fiber res 2 begin, suspending
fiber res 2 suspend got 99
fiber res 3 begin, suspending
fiber res 3 suspend got
fiber res 3 got returning
fiber res 2 got 99 returning
fiber res 1 got 2 returning
fiber res 0 got 1 returning

with fiber

main starting
fiber res 0 begin, suspending
main start got res lv 0
main resuming(rEins)
fiber res 0 suspend got rEins
fiber res 1 begin, suspending
main resume(rEins) got res lv 1
main resuming(rZwei)
fiber res 1 suspend got rZwei
fiber res 2 begin, suspending
main resume(rZwei) got res lv 2
main resuming(return)
fiber res 2 suspend got
fiber res 2 got returning
fiber res 1 got rZwei returning
fiber res 0 got rEins returning
main resume(return) got null

End e23fiber.php

args

e23fiber.php

/home/ch45859/web/wlkl.ch/public_html/inf/php/e23fiber.php

*** code does not have a span berfore first <br>***
<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__);
?>