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__);
?>