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

interface Iterator extends Traversable {
/* Methods */
public current(): mixed
public key(): mixed
public next(): void
public rewind(): void
public valid(): bool
}

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

<?php
class myIterator implements Iterator {
    private $position = 0;
    private $array = array(
        "firstelement",
        "secondelement",
        "lastelement",
    );  

    public function __construct() {
        $this->position = 0;
    }

    public function rewind() {
        var_dump(__METHOD__);
        $this->position = 0;
    }

    public function current() {
        var_dump(__METHOD__);
        return $this->array[$this->position];
    }

    public function key() {
        var_dump(__METHOD__);
        return $this->position;
    }

    public function next() {
        var_dump(__METHOD__);
        ++$this->position;
    }

    public function valid() {
        var_dump(__METHOD__);
        return isset($this->array[$this->position]);
    }
}

$it = new myIterator;

foreach($it as $key => $value) {
    var_dump($key, $value);
    echo "\n";
}
?>

 

Iterator::current

Iterator::current — Возвращает текущий элемент

public Iterator::current(): mixed

Iterator::key

Iterator::key — Возвращает ключ текущего элемента

public Iterator::key(): mixed

Iterator::next

Iterator::next — Перейти к следующему элементу

public Iterator::next(): void

Iterator::rewind

Iterator::rewind — Перематывает итератор к первому элементу

public Iterator::rewind(): void

Iterator::valid

Iterator::valid — Проверяет, действительна ли текущая позиция

public Iterator::valid(): bool