php 7 has now implement generators where you are able to return (yield) results from a method and only the ones that you will need.
// define the output as type Generator -- e.g. yield results.. the compiler will still work without this Generator keyword
function yieldSomeNumbers() : Generator {
yield 10;
yield 13;
}
foreach (yieldSomeNumbers() as $v) {
var_dump($v);
}
Will output
10
13
The ‘Generator’ at the end of the method ” : Generator” is not actual needed as the compiler will append it as such on the fly since the method is yield results.
For example, lets say that you are doing a search of numbers from 1-100 and are searching for the value of 10, so before generators the code would have been something like
function generateNumbers() {
return range(1,100); // load up a array of values 1-100 e.g. 1,2,3,4,5...
}
foreach (generateNumbers() as $v){
var_dump($v);
if ($v == 10) {
var_dump("FOUND");
break;
}
}
The ‘foreach (generateNumbers()’ will be using the full array where as
function generateSomeNumbers() : Generator {
foreach (range(1,100) as $v) {
yield $v;
}
}
foreach (generateSomeNumbers() as $v){
var_dump($v);
if ($v == 10) {
var_dump("FOUND");
break;
}
}
will only return each yield upon request.