Bird
Raised Fist0
PHPprogramming~5 mins

Generator return values in PHP

Choose your learning style10 modes available
Introduction
Generators let you create lists step-by-step without using much memory. Sometimes, you want to send back a final result when the generator finishes.
When you want to process large data one piece at a time but also get a final summary.
When you need to pause and resume a function but still return a final value at the end.
When you want to save memory by generating items on demand and also return a result after all items are done.
Syntax
PHP
<?php
function exampleGenerator() {
    yield 1;
    yield 2;
    return 'done';
}

$gen = exampleGenerator();
foreach ($gen as $value) {
    echo $value . "\n";
}
$returnValue = $gen->getReturn();
echo $returnValue;
?>
The return inside a generator sets the final return value.
Use getReturn() on the generator object after iteration to get that value.
Examples
This generator yields numbers 1 to 3, then returns 'finished'.
PHP
<?php
function countToThree() {
    yield 1;
    yield 2;
    yield 3;
    return 'finished';
}

$gen = countToThree();
foreach ($gen as $num) {
    echo $num . "\n";
}
echo $gen->getReturn();
?>
Yields letters 'a' and 'b', then returns 'end'.
PHP
<?php
function letters() {
    yield 'a';
    yield 'b';
    return 'end';
}

$gen = letters();
foreach ($gen as $letter) {
    echo $letter . "\n";
}
echo $gen->getReturn();
?>
Sample Program
This program yields three fruits one by one, then after the loop, it prints the return value from the generator.
PHP
<?php
function simpleGenerator() {
    yield 'apple';
    yield 'banana';
    yield 'cherry';
    return 'all fruits yielded';
}

$gen = simpleGenerator();
foreach ($gen as $fruit) {
    echo $fruit . "\n";
}
$returnValue = $gen->getReturn();
echo $returnValue . "\n";
?>
OutputSuccess
Important Notes
You must finish iterating the generator before calling getReturn(), or it will throw an error.
The return value is different from the yielded values; it is like a final message after all yields.
Generators help save memory by not creating the whole list at once.
Summary
Generators can return a final value using return inside the function.
Use getReturn() on the generator object after iteration to get that final value.
This helps combine step-by-step data generation with a final summary or result.

Practice

(1/5)
1. What does the return statement inside a PHP generator function do?
easy
A. It resets the generator to the beginning.
B. It immediately stops the generator and throws an error.
C. It sets the final value accessible via getReturn() after iteration.
D. It yields a value to the caller like yield does.

Solution

  1. Step 1: Understand generator return behavior

    In PHP, return inside a generator does not yield a value but sets a final return value.
  2. Step 2: Accessing the return value

    This final value can be accessed after iteration using the getReturn() method on the generator object.
  3. Final Answer:

    It sets the final value accessible via getReturn() after iteration. -> Option C
  4. Quick Check:

    Generator return sets final value = D [OK]
Hint: Remember: return in generators sets final value, not yields [OK]
Common Mistakes:
  • Thinking return yields a value
  • Assuming return throws an error
  • Confusing return with yield
2. Which of the following is the correct syntax to get the return value of a generator after iteration?
easy
A. $gen->getReturn();
B. $gen->return();
C. $gen->yieldReturn();
D. $gen->finalValue();

Solution

  1. Step 1: Identify the method to get generator return

    PHP provides getReturn() method on generator objects to retrieve the final return value after iteration.
  2. Step 2: Check other options

    Other methods like return(), yieldReturn(), or finalValue() do not exist in PHP generators.
  3. Final Answer:

    $gen->getReturn(); -> Option A
  4. Quick Check:

    Use getReturn() to get final value [OK]
Hint: Use getReturn() method on generator object [OK]
Common Mistakes:
  • Using non-existent methods like return()
  • Trying to get return value before iteration
  • Confusing yield with return
3. What will be the output of the following PHP code?
$gen = (function() {
    yield 1;
    yield 2;
    return 3;
})();
foreach ($gen as $value) {
    echo $value . ' ';
}
echo $gen->getReturn();
medium
A. 3
B. 1 2 3
C. 1 2
D. 1 2 0

Solution

  1. Step 1: Iterate generator yields

    The generator yields 1 and 2, so the loop prints "1 2 ".
  2. Step 2: Get the return value after iteration

    After the loop, getReturn() returns 3, which is printed immediately after.
  3. Final Answer:

    1 2 3 -> Option B
  4. Quick Check:

    Yields + return value = 1 2 3 [OK]
Hint: Print yields in loop, then append getReturn() value [OK]
Common Mistakes:
  • Expecting return to yield a value
  • Not calling getReturn() after iteration
  • Assuming getReturn() returns 0 by default
4. Identify the error in this PHP generator code:
function gen() {
    yield 1;
    return 2;
    yield 3;
}
$g = gen();
foreach ($g as $v) {
    echo $v . ' ';
}
echo $g->getReturn();
medium
A. The yield 3; after return is unreachable code.
B. You cannot use return inside a generator.
C. The getReturn() method does not exist.
D. The generator must yield at least three values.

Solution

  1. Step 1: Analyze code flow after return

    Once return 2; executes, the function ends, so yield 3; is never reached.
  2. Step 2: Confirm other statements

    Using return in generators is valid, getReturn() exists, and no minimum yield count is required.
  3. Final Answer:

    The yield 3; after return is unreachable code. -> Option A
  4. Quick Check:

    Code after return is unreachable = B [OK]
Hint: Code after return in generator is never executed [OK]
Common Mistakes:
  • Thinking yield after return runs
  • Believing return is not allowed in generators
  • Ignoring unreachable code warnings
5. You want to create a generator that yields numbers 1 to 3 and then returns their sum. Which code correctly achieves this?
hard
A. function gen() { yield 1; yield 2; yield 3; return 7; }
B. function gen() { for ($i = 1; $i <= 3; $i++) { yield $i; } return $i; }
C. function gen() { yield 1; yield 2; yield 3; return 6; yield 7; }
D. function gen() { $sum = 0; for ($i = 1; $i <= 3; $i++) { $sum += $i; yield $i; } return $sum; }

Solution

  1. Step 1: Check yielding numbers 1 to 3

    function gen() { $sum = 0; for ($i = 1; $i <= 3; $i++) { $sum += $i; yield $i; } return $sum; } uses a loop to yield 1, 2, 3 and sums them in $sum.
  2. Step 2: Verify other options

    The second option yields 1-3 but returns $i (4 after loop), not sum 6. The third has unreachable yield 7; after return. The fourth returns 7, wrong sum.
  3. Final Answer:

    The code that accumulates the sum during yielding -> Option D
  4. Quick Check:

    Yield loop + sum return = A [OK]
Hint: Sum while yielding, then return sum after loop ends [OK]
Common Mistakes:
  • Placing code after return (unreachable)
  • Returning wrong sum value
  • Not accumulating sum during yield
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard