Генераторы итераторы.
Primary tabs
<?php
// генераторы
## Простейший генератор
function simple($from = 0, $to = 100)
{
for($i = $from; $i < $to; $i++)
{
echo "значение = $i <br/>";
yield $i;
}
}
// yield возвращает одно значение и управление возвращается оператору foreach
foreach (simple() as $val)
{
echo "квадрат = ".($val*$val)."<br />";
if ($val >= 5) break;
}
?>
function generator()
{
echo "перед первым yield<br />";
yield 1;
echo "перед вторым yield<br />";
yield 2;
echo "перед третьим yield<br />";
yield 3;
echo "после третьего yield<br />";
}
foreach(generator() as $i)
{
echo "$i<br />";
}//Здесь на четвертом шаге итерации yeld возвращает нуль, это значение передается в цикл foreach и является сигналом к тому, чтобы foreach не выполнялся.
// Здесь фишка кода в том, что передаются в функцию collect два аргумента: массив и функция возврата "колбек". В Генераторе сразу делаем обход по всем элементам массива и возвращаем колбек.
function collect($arr, $callback)
{
foreach($arr as $value)
{
yield $callback($value);
}
}
$arr = [1, 2, 3, 4, 5, 6];
$collect = collect($arr,
function($e)
{
return $e * $e;
}
);
foreach($collect as $val) echo "$val "; - fgh's blog
- Log in to post comments
- 3380 reads