Start · Sprachen · PHP · Referenz · InternalIterator

InternalIterator

Klasse

Interne Hilfsklasse, die bei der Implementierung von <code>IteratorAggregate</code> in C-Extensions die Iterator-Logik kapselt und vereinfacht.

seit PHP 8.2.0 Kategorie: misc

Signatur

class InternalIterator implements Iterator

Beschreibung

InternalIterator ist eine interne PHP-Klasse, die primär für die Verwendung in PHP-Extensions (geschrieben in C) vorgesehen ist. Sie erlaubt es, den Rückgabewert von IteratorAggregate::getIterator() einfach zu erzeugen, ohne eine vollständige eigene Iterator-Klasse implementieren zu müssen.

Die Klasse implementiert das Iterator-Interface und stellt alle notwendigen Methoden (current(), key(), next(), rewind(), valid()) bereit. Für PHP-Userland-Code ist diese Klasse in der Regel nicht direkt nützlich, da sie nicht öffentlich instanziierbar ist – ihr Hauptzweck liegt in der PHP-Engine selbst und in C-Extensions.

Im PHP-Userland begegnet man InternalIterator indirekt, wenn man über Objekte iteriert, die intern mithilfe dieser Klasse ihren Iterator bereitstellen, etwa bei bestimmten eingebauten Datenstrukturen oder Extensions. Direkte Instanziierung aus PHP-Code heraus ist nicht möglich und führt zu einem Fehler.

Entwickler, die eigene PHP-Extensions schreiben und IteratorAggregate unterstützen wollen, profitieren von dieser Klasse, da sie erheblichen Boilerplate-Code in C-Ebene einspart und eine standardisierte, korrekte Iterator-Implementierung liefert.

Beispiele

Indirektes Auftreten von InternalIterator beim Iterieren

<?php
// InternalIterator taucht auf, wenn interne Klassen IteratorAggregate implementieren.
// Beispiel: SplFixedArray nutzt intern einen solchen Iterator.
$arr = SplFixedArray::fromArray([10, 20, 30]);

foreach ($arr as $key => $value) {
    echo $key . ' => ' . $value . PHP_EOL;
}

// Den tatsächlichen Iterator-Typ ermitteln
$iterator = $arr->getIterator();
echo get_class($iterator) . PHP_EOL; // InternalIterator (ab PHP 8.2)
0 => 10 1 => 20 2 => 30 InternalIterator

Versuch der direkten Instanziierung schlägt fehl

<?php
// InternalIterator kann nicht direkt aus dem Userland instanziiert werden.
try {
    $iter = new InternalIterator();
} catch (Error $e) {
    echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
}
Fehler: Cannot directly construct InternalIterator, use the appropriate get*Iterator() method

// Wichtig · Fallstricke

Nicht für den direkten Einsatz im PHP-Userland gedacht: InternalIterator kann nicht durch normalen PHP-Code instanziiert werden. Jeder Versuch, new InternalIterator() aufzurufen, führt zu einem Error. Die Klasse ist ausschließlich für den Einsatz in der PHP-Kern-Implementierung und in C-Extensions vorgesehen.

Wenn Sie in eigenen PHP-Klassen einen Iterator bereitstellen möchten, implementieren Sie stattdessen direkt Iterator oder IteratorAggregate im Userland.