What are the advantages of using yield in a closure function compared to a traditional loop?

Using yield in a closure function allows for more efficient memory usage compared to a traditional loop. This is because yield generates values lazily, only when needed, whereas a traditional loop generates all values upfront. Additionally, yield allows for better code readability and maintainability by separating the generation of values from the iteration logic.

function generateNumbers($start, $end) {
    for ($i = $start; $i <= $end; $i++) {
        yield $i;
    }
}

$numbers = generateNumbers(1, 10);

foreach ($numbers as $number) {
    echo $number . PHP_EOL;
}