PHPCon Poland 2024

Класс Generator

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

Введение

Объекты класса Generator возвращаются генераторами.

Предостережение

Объекты Generator нельзя создать через ключевое слово new.

Обзор класса

final class Generator implements Iterator {
/* Методы */
public current(): mixed
public getReturn(): mixed
public key(): mixed
public next(): void
public rewind(): void
public send(mixed $value): mixed
public throw(Throwable $exception): mixed
public valid(): bool
public __wakeup(): void
}

Смотрите также

Смотрите также раздел «Итераторы объектов».

Содержание

  • Generator::current — Получает текущее значение генератора
  • Generator::getReturn — Получает значение, которое возвращает генератор
  • Generator::key — Получает ключ сгенерированного элемента
  • Generator::next — Возобновляет работу генератора
  • Generator::rewind — Отматывает итератор
  • Generator::send — Передаёт значение в генератор
  • Generator::throw — Бросает исключение в генератор
  • Generator::valid — Проверяет, закрыт ли итератор
  • Generator::__wakeup — Играет роль callback-функции при сериализации генератора
add a note

User Contributed Notes 1 note

up
45
Pistachio
8 years ago
Unlike return, yield can be used anywhere within a function so logic can flow more naturally. Take for example the following Fibonacci generator:

<?php
function fib($n)
{
$cur = 1;
$prev = 0;
for (
$i = 0; $i < $n; $i++) {
yield
$cur;

$temp = $cur;
$cur = $prev + $cur;
$prev = $temp;
}
}

$fibs = fib(9);
foreach (
$fibs as $fib) {
echo
" " . $fib;
}

// prints: 1 1 2 3 5 8 13 21 34
To Top