function fibonacci($c, $quit) { $x = 0; $y = 1; while (true) { list($value, $channel) = (yield Channel::any([$c, $x], $quit)); switch ($channel) { case $c: $tmp = $x + $y; $x = $y; $y = $tmp; break; case $quit: echo $value; return; } } }