Генераторы итераторы.
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
- 2948 reads