3v4l.org

run code in 300+ PHP versions simultaneously
<?php $stepMutator = stepMutator(); // This is the same as // // var_dump(iterator_to_array(stepMutator())); // var_dump(iterator_to_array($stepMutator)); function importSupport() { return array_values([ 'log' => function(?float $steps, ?string $tmpl = null) { return sprintf($tmpl ?? 'Mutator(steps=%s) Incremented', $steps); }, ]); } function importSpinners() { return array_values([ 'increment' => function(int $i) {return ++$i;}, 'decrement' => function(int $i) {return --$i;}, ]); } function stepMutator() { $id = random_int(1, 500000); $logLine = 0; list($log, $increment, $decrement) = array_merge( importSupport(), importSpinners() ); $logStep = function(int $step) {return sprintf('LogStep(%d)', $step);}; $stepper = function(int $step) {return sprintf('Step(%d)', $step);}; $steps = 0; yield $logStep(++$logLine) => $log($steps, 'Initialized(steps=%d)', $steps); yield $logStep(++$logLine) => $log(time(), 'Initialized(time=%s)'); yield $logStep(++$logLine) => $log($id, 'Initialized(id=%s)'); yield $logStep(++$logLine) => $log($steps = $increment($steps)); yield $logStep(++$logLine) => $log($steps = $increment($steps)); yield $logStep(++$logLine) => $log($steps = $increment($steps)); // Say, for instance, something needs pruning... yield $logStep(++$logLine) => $log($steps = $decrement($steps), 'Mutator(steps=%s) Decremented' ); yield $logStep(++$logLine) => $log($steps = $increment($steps)); yield $logStep(++$logLine) => $log(null, 'SIGEND'); // Signal end of processing. // Result of our effort. yield 'payload' => array_map($stepper, range(1, $steps)); }

preferences:
36.75 ms | 402 KiB | 5 Q