Iterator
Интерфейс с пятью методами для ручного управления перебором.
Синтаксис
class Name implements IteratorВозвращаемое значение
IteratorМетоды `current()`, `key()`, `next()`, `rewind()`, `valid()`.
Примеры
Диапазон чисел с шагом:
<?php
class Steps implements Iterator
{
private int $value;
public function __construct(private int $from, private int $to, private int $step) {}
public function rewind(): void { $this->value = $this->from; }
public function valid(): bool { return $this->value <= $this->to; }
public function current(): int { return $this->value; }
public function key(): int { return ($this->value - $this->from) / $this->step; }
public function next(): void { $this->value += $this->step; }
}
foreach (new Steps(10, 30, 10) as $key => $value) {
echo $key, '=', $value, ' ';
}Результат:
0=10 1=20 2=30Примечания
foreach вызывает методы в порядке: rewind(), затем на каждом шаге valid(), current(), key() и next(). Генератор делает то же самое намного короче.
См. также
- IteratorAggregate — Интерфейс объектов, которые можно перебрать в `foreach`.
- Generator — Объект, который возвращает функция с `yield`.
- current — Возвращает элемент, на который указывает внутренний указатель массива.
В учебнике
- Встроенные интерфейсы — Интерфейсы PHP, которые учат объект вести себя как массив — Countable, IteratorAggregate, ArrayAccess, JsonSerializable и Stringable.