Содержание

Интерфейс Iterator

Итератор — это поведенческий паттерн, позволяющий последовательно обходить сложную коллекцию, без раскрытия деталей её реализации.

Интерфейс для внешних итераторов или объектов, которые могут повторять себя изнутри.

Обзор интерфейса

 Iterator extends Traversable {
/* Методы */
abstract public current ( ) : mixed
abstract public key ( ) : scalar
abstract public next ( ) : void
abstract public rewind ( ) : void
abstract public valid ( ) : bool
}

Предопределенные итераторы

PHP уже предоставляет некоторые итераторы для многих ежедневных задач. См. список итераторов SPL для более детальной информации.

Пример

Этот пример демонстрирует в каком порядке вызываются методы, когда используется с итератором оператор foreach.

<?php
class MyIterator implements Iterator
{
    private $var = array();
 
    public function __construct($array)
    {
        if (is_array($array)) {
            $this->var = $array;
        }
    }
 
    public function rewind()
    {
        echo "перемотка в начало\n";
        reset($this->var);
    }
 
    public function current()
    {
        $var = current($this->var);
        echo "текущий: $var\n";
        return $var;
    }
 
    public function key() 
    {
        $var = key($this->var);
        echo "ключ: $var\n";
        return $var;
    }
 
    public function next() 
    {
        $var = next($this->var);
        echo "следующий: $var\n";
        return $var;
    }
 
    public function valid()
    {
        $key = key($this->var);
        $var = ($key !== NULL && $key !== FALSE);
        echo "верный: $var\n";
        return $var;
    }
 
}
 
$values = array(1,2,3);
$it = new MyIterator($values);
 
foreach ($it as $a => $b) {
    print "$a: $b\n";
}
?>

Результатом выполнения данного примера будет что-то подобное:

перемотка в начало
верный: 1
текущий: 1
ключ: 0
0: 1
следующий: 2
верный: 1
текущий: 2
ключ: 1
1: 2
следующий: 3
верный: 1
текущий: 3
ключ: 2
2: 3
следующий:
верный: 

Содержание

  1. Iterator::current — Возврат текущего элемента
  2. Iterator::key — Возврат ключа текущего элемента
  3. Iterator::next — Переход к следующему элементу
  4. Iterator::rewind — Перемотать итератор на первый элемент
  5. Iterator::valid — Проверяет корректность текущей позиции