1. Es ist auch selbst ein Iterator und muss zur internen Speicherung an einen anderen Iterator übergeben werden, nämlich an den internen Iterator InnerIterator.
2. Die ursprüngliche Iteratorfunktion kann durch Erben von IteratorIterator aktualisiert werden.
Seine Konstruktionsparameter müssen ebenfalls Iteratoren sein, und die Parametersignatur selbst erfordert ein Objekt, das die Traversable-Schnittstelle implementiert.
Beispiel
Die Klasse OutIterator erweitert IteratorIterator { öffentliche Funktion rewind() { echo __METHOD__, PHP_EOL; return parent::rewind(); } öffentliche Funktion valid() { echo __METHOD__, PHP_EOL; return parent::valid(); } öffentliche Funktion current() { echo __METHOD__, PHP_EOL; return parent::current() . } öffentliche Funktionstaste() { echo __METHOD__, PHP_EOL; return parent::key(); } öffentliche Funktion next() { echo __METHOD__, PHP_EOL; return parent::next(); } öffentliche Funktion getInnerIterator() { echo __METHOD__, PHP_EOL; return parent::getInnerIterator(); } } $iterator = new OutIterator(new ArrayIterator([1, 2, 3])); foreach ($iterator as $k => $v) { echo $k, ': ', $v, PHP_EOL; } // OutIterator::rewind // OutIterator::valid // OutIterator::current // OutIterator::key // 0: 1_suffix // OutIterator::next // OutIterator::valid // OutIterator::current // OutIterator::key // 1: 2_suffix // OutIterator::next // OutIterator::valid // OutIterator::current // OutIterator::key // 2: 3_suffix // OutIterator::next // OutIterator::valid
Das Obige ist das Verständnis des PHP-Paketiterators. Ich hoffe, es wird für alle hilfreich sein. Weitere PHP-Lernanleitungen: Quellcode-Netzwerk