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.