Start · Sprachen · PHP · Referenz · EmptyIterator

EmptyIterator

Klasse

Ein Iterator, der keine Elemente enthält und sofort als abgeschlossen gilt – nützlich als Null-Objekt-Muster für leere Iterationen.

seit PHP 5.1.0 Kategorie: oop

Signatur

class EmptyIterator implements Iterator

Beschreibung

EmptyIterator implementiert das Iterator-Interface und repräsentiert eine leere Sequenz ohne Elemente. Alle Methoden des Interfaces sind implementiert, geben jedoch neutrale oder leere Werte zurück bzw. werfen eine NoRewindableIterator-kompatible Ausnahme bei ungültigem Zugriff.

Die Klasse ist besonders im Kontext des Null-Objekt-Musters (Null Object Pattern) nützlich: Anstatt an Stellen, die einen Iterator erwarten, null zurückzugeben oder auf null zu prüfen, liefert man einfach einen EmptyIterator. Der aufrufende Code kann dann ohne zusätzliche Prüfung mit dem Iterator arbeiten, ohne dass Fehler auftreten.

Ein typischer Anwendungsfall ist das Rückgeben eines leeren Iterators aus einer Methode, wenn keine Ergebnisse vorhanden sind – beispielsweise bei einer Datenbankabfrage ohne Treffer, statt ein leeres Array zu verwenden oder null zurückzugeben.

EmptyIterator ist Teil der Standard PHP Library (SPL) und erfordert keine zusätzliche Extension.

Beispiele

Grundlegende Verwendung als leerer Iterator

<?php
$iterator = new EmptyIterator();

foreach ($iterator as $key => $value) {
    // Diese Schleife wird niemals ausgeführt
    echo "Schlüssel: $key, Wert: $value\n";
}

echo "Schleife abgeschlossen. Keine Elemente vorhanden.";
Schleife abgeschlossen. Keine Elemente vorhanden.

Null-Objekt-Muster: Methode gibt leeren Iterator zurück

<?php
function getResults(array $data): Iterator
{
    if (empty($data)) {
        // Statt null zurückzugeben, liefern wir einen EmptyIterator
        return new EmptyIterator();
    }

    return new ArrayIterator($data);
}

// Aufruf mit leeren Daten
$results = getResults([]);
foreach ($results as $item) {
    echo $item . "\n";
}
echo "Fertig – keine null-Prüfung nötig.\n";

// Aufruf mit Daten
$results = getResults(['Apfel', 'Banane', 'Kirsche']);
foreach ($results as $item) {
    echo $item . "\n";
}
Fertig – keine null-Prüfung nötig. Apfel Banane Kirsche

Verwendung in Kombination mit AppendIterator

<?php
// EmptyIterator als Platzhalter in zusammengesetzten Iteratoren
$append = new AppendIterator();
$append->append(new EmptyIterator());
$append->append(new ArrayIterator([1, 2, 3]));
$append->append(new EmptyIterator());

foreach ($append as $value) {
    echo $value . "\n";
}
1 2 3

// Wichtig · Fallstricke

Zugriff auf ungültige Methoden: Der Aufruf von current() oder key() auf einem EmptyIterator wirft eine \Exception, da es keine Elemente gibt. Dies passiert jedoch nicht beim normalen Einsatz in einer foreach-Schleife, da valid() sofort false zurückgibt und die Iteration gar nicht erst beginnt.

Unterschied zu ArrayIterator([]): Funktional ähnlich, aber EmptyIterator ist semantisch klarer und hat keinen internen Array-Overhead. Für Fälle, in denen explizit ein leerer Iterator als Null-Objekt benötigt wird, ist EmptyIterator die bessere Wahl.