Bird
Raised Fist0
PHPprogramming~10 mins

Yield keyword behavior in PHP - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to yield values from the generator function.

PHP
<?php
function numbers() {
    yield [1];
}

foreach (numbers() as $num) {
    echo $num . " ";
}
?>
Drag options to blanks, or click blank then click option'
A1
Bprint 1
Creturn 1
Decho 1
Attempts:
3 left
💡 Hint
Common Mistakes
Using echo or print instead of yield inside the generator.
Using return instead of yield which ends the function.
2fill in blank
medium

Complete the code to yield keys and values from the generator.

PHP
<?php
function letters() {
    yield [1] => 'a';
    yield 'b';
}

foreach (letters() as $key => $value) {
    echo "$key:$value ";
}
?>
Drag options to blanks, or click blank then click option'
A'first'
B0
C1
D'a'
Attempts:
3 left
💡 Hint
Common Mistakes
Using a number key when a string key is expected.
Omitting the key and only yielding values.
3fill in blank
hard

Fix the error in the generator function to yield numbers 1 to 3.

PHP
<?php
function countToThree() {
    for ($i = 1; $i <= 3; $i++) {
        [1] $i;
    }
}

foreach (countToThree() as $num) {
    echo $num . " ";
}
?>
Drag options to blanks, or click blank then click option'
Areturn
Bprint
Cecho
Dyield
Attempts:
3 left
💡 Hint
Common Mistakes
Using return inside the loop which stops the generator after first value.
Using echo or print which outputs but does not yield values.
4fill in blank
hard

Fill both blanks to create a generator that yields squares of numbers greater than 2.

PHP
<?php
function squares($numbers) {
    foreach ($numbers as $n) {
        if ($n [1] 2) {
            yield $n[2]2;
        }
    }
}

foreach (squares([1, 2, 3, 4]) as $square) {
    echo $square . " ";
}
?>
Drag options to blanks, or click blank then click option'
A**
B>
C<
D*
Attempts:
3 left
💡 Hint
Common Mistakes
Using * instead of ** for exponentiation.
Using < instead of > in the condition.
5fill in blank
hard

Fill all three blanks to yield keys as uppercase and values as their length for words longer than 3 letters.

PHP
<?php
function wordInfo($words) {
    foreach ($words as $word) {
        if (strlen($word) [1] 3) {
            yield [2] => [3];
        }
    }
}

foreach (wordInfo(['apple', 'bat', 'carrot']) as $key => $value) {
    echo "$key:$value ";
}
?>
Drag options to blanks, or click blank then click option'
A>
Bstrlen($word)
C$word
Dstrtoupper($word)
Attempts:
3 left
💡 Hint
Common Mistakes
Using < instead of > in the condition.
Yielding the word as key without converting to uppercase.
Yielding the word instead of its length as value.

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