What if you could handle huge data without slowing down or crashing your program?
Why Yield keyword behavior in PHP? - Purpose & Use Cases
Imagine you have a huge list of data, like thousands of user records, and you want to process them one by one.
If you try to load all data into memory at once, your program might slow down or crash.
Loading everything at once uses a lot of memory and can make your program freeze.
Also, writing loops that store all results before using them can be slow and waste resources.
The yield keyword lets you produce one item at a time, like handing out cards one by one instead of the whole deck.
This way, your program uses less memory and can start working immediately without waiting for everything.
$results = []; foreach ($data as $item) { $results[] = process($item); } return $results;
function processData($data) {
foreach ($data as $item) {
yield process($item);
}
}You can handle large data smoothly and efficiently, making your programs faster and more memory-friendly.
Think of reading a huge log file line by line instead of loading the entire file into memory at once.
Yield helps produce data one piece at a time.
It saves memory and speeds up processing.
Great for working with large or infinite data sets.
Practice
yield keyword do in a PHP function?Solution
Step 1: Understand yield behavior
Theyieldkeyword pauses the function and returns a value without ending it.Step 2: Compare with return
Unlikereturn,yieldallows the function to resume and produce more values later.Final Answer:
It returns a value and pauses the function, resuming later to produce more values. -> Option AQuick Check:
Yield pauses and resumes function = A [OK]
- Confusing yield with return which ends function
- Thinking yield creates variables
- Assuming yield converts function to class method
Solution
Step 1: Recall yield syntax
The correct syntax to yield a value is simplyyield $value;inside the function.Step 2: Check other options
Options B, C, and D use invalid or incorrect syntax for yield in PHP.Final Answer:
yield $value; -> Option DQuick Check:
Simple yield syntax is 'yield $value;' [OK]
- Adding return before yield
- Using arrow (=>) with yield
- Calling yield like a function
function gen() {
yield 1;
yield 2;
yield 3;
}
foreach (gen() as $val) {
echo $val . ' ';
}Solution
Step 1: Understand generator yields
The functiongen()yields values 1, 2, and 3 one by one.Step 2: foreach prints each yielded value
Theforeachloop prints each value followed by a space, so output is '1 2 3 '.Final Answer:
1 2 3 -> Option AQuick Check:
Yielded values printed with spaces = B [OK]
- Expecting concatenated string without spaces
- Thinking yield returns an array
- Assuming syntax error with yield
function numbers() {
yield 1
yield 2;
}
foreach(numbers() as $n) {
echo $n;
}Solution
Step 1: Check yield statements
The first yield statement is missing a semicolon at the end, causing a syntax error.Step 2: Validate other parts
Using yield inside a function and foreach syntax are correct; yield does not require parentheses.Final Answer:
Missing semicolon after first yield statement -> Option BQuick Check:
Each yield needs semicolon [OK]
- Forgetting semicolon after yield
- Thinking yield needs parentheses
- Assuming foreach syntax error
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?
Solution
Step 1: Analyze filtering condition
The function yields only numbers greater than 0, so it skips -2, 0, and -1.Step 2: Identify yielded values
Only 3 and 5 satisfy the condition and are yielded, printed with commas.Final Answer:
3,5, -> Option CQuick Check:
Yield filters positive numbers only = D [OK]
- Including zero or negative numbers
- Thinking yield can't be inside if
- Expecting all values printed
Ready to prove it?
Pass the test and this pattern moves unknown
