Bird
Raised Fist0
PHPprogramming~20 mins

Yield keyword behavior in PHP - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Yield Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this PHP generator?
Consider the following PHP code using yield. What will it output when run?
PHP
<?php
function gen() {
    yield 1;
    yield 2;
    yield 3;
}
foreach (gen() as $value) {
    echo $value . ' ';
}
?>
AError: yield used outside function
B123
C1 2 3
DArray
Attempts:
2 left
💡 Hint
Remember that yield produces values one by one, and the foreach loop prints each.
❓ Predict Output
intermediate
2:00remaining
What does this PHP generator return?
What will be the output of this PHP code snippet?
PHP
<?php
function gen() {
    yield 'a' => 1;
    yield 'b' => 2;
}
foreach (gen() as $key => $value) {
    echo "$key:$value ";
}
?>
Aa:1 b:2
B1:a 2:b
Ca b
DError: Invalid key in yield
Attempts:
2 left
💡 Hint
Keys can be assigned in yield and are preserved in foreach.
❓ Predict Output
advanced
2:00remaining
What is the output of this nested generator?
Analyze the following PHP code with nested generators. What will it output?
PHP
<?php
function gen1() {
    yield 1;
    yield 2;
}
function gen2() {
    yield from gen1();
    yield 3;
}
foreach (gen2() as $v) {
    echo $v . ' ';
}
?>
AError: yield from not supported
B3 1 2
C1 3 2
D1 2 3
Attempts:
2 left
💡 Hint
The yield from keyword delegates yielding to another generator.
❓ Predict Output
advanced
2:00remaining
What error does this PHP code raise?
What error will this PHP code produce when executed?
PHP
<?php
function gen() {
    yield 1;
}
$gen = gen();
$gen->send(10);
?>
ANo error, outputs 10
BFatal error: Cannot send() to a generator that has not started
C1
D10
Attempts:
2 left
💡 Hint
You must start the generator before sending a value.
🧠 Conceptual
expert
3:00remaining
How many values does this generator produce?
Given the following PHP generator code, how many values will be yielded when iterated?
PHP
<?php
function gen() {
    for ($i = 0; $i < 3; $i++) {
        if ($i === 1) {
            yield $i;
            continue;
        }
        yield $i * 2;
    }
}
$values = iterator_to_array(gen());
echo count($values);
?>
A3
B2
C4
D1
Attempts:
2 left
💡 Hint
Count how many times yield is called in the loop.

Practice

(1/5)
1. What does the yield keyword do in a PHP function?
easy
A. It returns a value and pauses the function, resuming later to produce more values.
B. It immediately stops the function and returns a single value.
C. It creates a new variable inside the function.
D. It converts the function into a class method automatically.

Solution

  1. Step 1: Understand yield behavior

    The yield keyword pauses the function and returns a value without ending it.
  2. Step 2: Compare with return

    Unlike return, yield allows the function to resume and produce more values later.
  3. Final Answer:

    It returns a value and pauses the function, resuming later to produce more values. -> Option A
  4. Quick Check:

    Yield pauses and resumes function = A [OK]
Hint: Yield pauses function to produce values one by one [OK]
Common Mistakes:
  • Confusing yield with return which ends function
  • Thinking yield creates variables
  • Assuming yield converts function to class method
2. Which of the following is the correct syntax to yield values from a function in PHP?
easy
A. yield($value);
B. return yield $value;
C. yield => $value;
D. yield $value;

Solution

  1. Step 1: Recall yield syntax

    The correct syntax to yield a value is simply yield $value; inside the function.
  2. Step 2: Check other options

    Options B, C, and D use invalid or incorrect syntax for yield in PHP.
  3. Final Answer:

    yield $value; -> Option D
  4. Quick Check:

    Simple yield syntax is 'yield $value;' [OK]
Hint: Yield uses simple 'yield $value;' syntax [OK]
Common Mistakes:
  • Adding return before yield
  • Using arrow (=>) with yield
  • Calling yield like a function
3. What will be the output of this PHP code?
function gen() {
  yield 1;
  yield 2;
  yield 3;
}
foreach (gen() as $val) {
  echo $val . ' ';
}
medium
A. 1 2 3
B. Array
C. 123
D. Error: yield not allowed here

Solution

  1. Step 1: Understand generator yields

    The function gen() yields values 1, 2, and 3 one by one.
  2. Step 2: foreach prints each yielded value

    The foreach loop prints each value followed by a space, so output is '1 2 3 '.
  3. Final Answer:

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

    Yielded values printed with spaces = B [OK]
Hint: Yield outputs values one by one in foreach loop [OK]
Common Mistakes:
  • Expecting concatenated string without spaces
  • Thinking yield returns an array
  • Assuming syntax error with yield
4. Identify the error in this PHP code using yield:
function numbers() {
  yield 1
  yield 2;
}
foreach(numbers() as $n) {
  echo $n;
}
medium
A. foreach loop syntax is wrong
B. Missing semicolon after first yield statement
C. Cannot use yield inside a function
D. Yield must be followed by parentheses

Solution

  1. Step 1: Check yield statements

    The first yield statement is missing a semicolon at the end, causing a syntax error.
  2. Step 2: Validate other parts

    Using yield inside a function and foreach syntax are correct; yield does not require parentheses.
  3. Final Answer:

    Missing semicolon after first yield statement -> Option B
  4. Quick Check:

    Each yield needs semicolon [OK]
Hint: Check semicolons after yield statements [OK]
Common Mistakes:
  • Forgetting semicolon after yield
  • Thinking yield needs parentheses
  • Assuming foreach syntax error
5. Given this PHP function using yield:
function filterPositive(array $numbers) {
  foreach ($numbers as $num) {
    if ($num > 0) {
      yield $num;
    }
  }
}

$values = [-2, 0, 3, 5, -1];
foreach (filterPositive($values) as $val) {
  echo $val . ',';
}

What is the output?
hard
A. 0,3,5,
B. -2,0,3,5,-1,
C. 3,5,
D. Error: yield cannot be used with if

Solution

  1. Step 1: Analyze filtering condition

    The function yields only numbers greater than 0, so it skips -2, 0, and -1.
  2. Step 2: Identify yielded values

    Only 3 and 5 satisfy the condition and are yielded, printed with commas.
  3. Final Answer:

    3,5, -> Option C
  4. Quick Check:

    Yield filters positive numbers only = D [OK]
Hint: Yield can filter values with if condition [OK]
Common Mistakes:
  • Including zero or negative numbers
  • Thinking yield can't be inside if
  • Expecting all values printed
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