$counter = $start; if ($start > $end) { return; // Iterator is backwards so don't do it. } while ($counter <= $end) { (yield $counter); $counter += $step; } return; } } echo '<h1>Generators</h1>'; echo '<h2>Basic</h2>'; $gen = new Generators(); $basic = $gen->getBasicIterator(); foreach ($basic() as $key => $word) { echo $key . '=>' . $word . '<br>'; } echo '<br><br>'; $evenCounter = $gen->xRangeGenerator(0, 10, 2); foreach ($evenCounter as $number) { echo "Number: {$number}<br>"; } echo '<br><br>'; // Looping a generator and manually advancing another in the loop $evenCounter = $gen->xRangeGenerator(0, 10, 2); $oddCounter = $gen->xRangeGenerator(1, 11, 2); foreach ($evenCounter as $number) { echo "Number: {$number}<br>"; echo "Odd number: " . $oddCounter->current() . '<br>';