home
The Iterator interface

The Iterator interface

(PHP 5, PHP 7, PHP 8)

Introduction

Interface for external iterators or objects that can be iterated themselves internally.

Interface synopsis

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

Predefined iterators

PHP already provides a number of iterators for many day to day tasks. See SPL iterators for a list.

Examples

Example #1 Basic usage

This example demonstrates in which order methods are called when using foreach with an iterator.

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

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

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

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

#[
\ReturnTypeWillChange]
public function
key() {
var_dump(__METHOD__);
return
$this->position;
}

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

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

$it = new myIterator;

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

The above example will output something similar to:

string(18) "myIterator::rewind"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(0)
string(12) "firstelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(1)
string(13) "secondelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(2)
string(11) "lastelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"

See Also

See also object iteration.

Table of Contents