Das Iterator-Interface

(PHP 5, PHP 7, PHP 8)

Einführung

Interface für externe Iteratoren oder Objekte, die selbstiterierend sind.

Interface-Übersicht

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

Vordefinierte Iteratoren

PHP bietet bereits eine Anzahl von Iteratoren für viele alltägliche Aufgaben an. SPL-Iteratoren enthält eine entsprechende Liste.

Beispiele

Beispiel #1 Grundlegende Nutzung

Dieses Beispiel demonstriert, in welcher Reihenfolge Methoden aufgerufen werden, wenn foreach auf einem Iterator angewendet wird.

<?php
class meinIterator implements Iterator {
private
$position = 0;
private
$array = array(
"erstesElement",
"zweitesElement",
"letztesElement",
);

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 meinIterator;

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

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

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

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

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

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

Siehe auch

Objekt-Iteration

Inhaltsverzeichnis