Bird
Raised Fist0
PHPprogramming~5 mins

Generator return values in PHP - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Generator return values
O(n)
Understanding Time Complexity

Let's explore how the time needed to get values from a generator grows as we use it more.

We want to see how the generator's return value affects the work done.

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

function countToN(int $n): Generator {
    for ($i = 1; $i <= $n; $i++) {
        yield $i;
    }
    return 'Done';
}

$gen = countToN(5);
foreach ($gen as $value) {
    echo $value . "\n";
}
$returnValue = $gen->getReturn();

This code yields numbers from 1 to n, then returns a final message after finishing.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: The for-loop yielding values one by one.
  • How many times: Exactly n times, once for each number from 1 to n.
How Execution Grows With Input

Each time we ask the generator for a value, it does one step of work.

Input Size (n)Approx. Operations
1010 steps to yield values + 1 step to return
100100 steps to yield values + 1 step to return
10001000 steps to yield values + 1 step to return

Pattern observation: The work grows directly with n, plus a tiny extra step at the end.

Final Time Complexity

Time Complexity: O(n)

This means the time to get all values and the return grows in a straight line with how many values we want.

Common Mistake

[X] Wrong: "The return value makes the generator run again for each call."

[OK] Correct: The generator only runs once through the loop; the return value is just stored and accessed after finishing.

Interview Connect

Understanding how generators yield and return helps you explain efficient data processing in real projects.

Self-Check

"What if the generator yielded values conditionally inside nested loops? How would the time complexity change?"

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