Bird
Raised Fist0
PHPprogramming~10 mins

Generator return values in PHP - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Generator return values
Start Generator Function
↓
Yield values one by one
↓
Generator finishes
↓
Return value captured
↓
Access return value via getReturn()
↓
End
The generator yields values step-by-step, then returns a final value which can be accessed after iteration ends.
Execution Sample
PHP
<?php
function gen() {
  yield 1;
  yield 2;
  return 3;
}
$g = gen();
foreach ($g as $val) {
  echo $val . "\n";
}
echo "Return: " . $g->getReturn() . "\n";
?>
This code yields two values from the generator, then returns a final value accessible after iteration.
Execution Table
StepActionYielded ValueGenerator StateOutput
1Start generator and yield first value1RunningPrint 1
2Yield second value2RunningPrint 2
3Generator reaches return statementNoneFinishedNo yield, iteration ends
4Access return value via getReturn()3FinishedPrint Return: 3
💡 Generator finished after return statement, iteration stops, return value accessed separately
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
$valundefined12undefinedundefined
$g->getReturn()undefinedundefinedundefined33
Key Moments - 2 Insights
Why does the return value not appear in the foreach loop output?
The foreach loop only outputs values yielded by yield statements (see steps 1 and 2). The return value is not yielded, so it appears only when accessed with getReturn() after iteration ends (step 4).
What happens when the generator hits the return statement?
At step 3, the generator finishes and stops yielding values. The return value is stored internally and can be retrieved later with getReturn(), but it does not produce output during iteration.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the generator state after yielding the second value?
ARunning
BFinished
CPaused
DNot started
💡 Hint
Check the 'Generator State' column at Step 2 in the execution_table.
At which step does the generator stop yielding values?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look for the step where 'Generator State' changes to 'Finished' and no value is yielded.
If the return statement was removed, what would happen to the output at step 4?
AIt would print the last yielded value
BIt would print nothing or null
CIt would print 0
DIt would cause an error
💡 Hint
Without a return, getReturn() returns null or nothing after iteration ends.
Concept Snapshot
PHP Generators yield values stepwise using yield.
When generator ends, it can return a value with return.
Return value is NOT yielded, so foreach won't show it.
Use getReturn() on generator after iteration to get it.
Useful to send final result after yielding sequence.
Full Transcript
This example shows a PHP generator function that yields two values, 1 and 2, then returns 3. The foreach loop prints the yielded values 1 and 2. After the loop finishes, the generator is done, and the return value 3 is accessed using getReturn(). The return value does not appear during iteration because only yield produces output. The generator state changes from running to finished when the return statement is reached. This allows the program to get a final result from the generator after all values have been yielded.

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