Introduction

This article explains Generators in PHP. Generators provide simple iterations without the overhead or complexity of implementing a category that implements the Iterator interface. A generator permits you to write code that uses foreach to iterate over a group of information without the necessity of creating an associated array in memory, that may cause you to exceed a memory limit, or that needs a substantial quantity of processing time to get. Instead, you'll be able to write a generator function, that is the same as a traditional function, except that rather than returning once, a generator will yield persistently because it is intended to produce the values to be iterated over.

A generator function appearance rather like a standard function, except that rather than returning a value, a generator yields as several values because it must. When a generator function is called, it returns the associated object that will be iterated over. When you iterate over that object (for instance, via a foreach loop), PHP can determine the generator function each time it wants a value, then saves the state of the generator once the generator yields a value so it is often resumed once succeeding values is needed. A generator cannot return a value; doing so will result in a compile error.

<?php

function gen_count() {

for ($a = 1; $a <= 5; $a++) {

yield $a;

}

}

$Gen_value= gen_count();

foreach ($Gen_valu as $v) {

echo "$v"."<br>";

}

?>

Yielding a key/value pair


<?php

$type = <<<'EOF'

a;java;likes oops pattern

b;php;php is a open source

c;Zend;zend is framework

EOF;

function exchange_input($type) {

foreach (explode("<br>", $type) as $line) {

$field_name = explode('|', $line);

$id = array_shift($field_name);

yield $id => $field_name;

}

}

foreach (exchange_input($type) as $id => $field_name) {

echo "$id:<br>";

echo " $field_name[0]<br>";

echo " $field_name[1]<br>";

}

?>

Implement range generator

<?php

function oddrange($begining, $control, $Steps = 1) {

if ($beginning < $control) {

if ($Steps <= 0) {

throw new LogicException('must be positive');

}

for ($a = $begining; $a <= $control; $a += $Steps) {

yield $a;

}

} else {

if ($Steps >= 0) {

throw new LogicException('must be negative');

}

for ($a = $beginning; $a >= $control; $a += $Steps) {

yield $a;

}

}

}

echo 'odd no range(): ';

foreach (range(1, 9, 2) as $num) {

echo "$num ";

}

echo "<br>";

echo 'odd no for oddrange(): ';

foreach (oddrange(1, 9, 2) as $num) {

echo "$num";

}

?>