Signatur
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)
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;
}
// 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.