1. También es un iterador en sí mismo. Cuando se crea una instancia, debe pasarse a otro iterador para el almacenamiento interno, es decir, la iteración interna InnerIterator.
2. La función del iterador original se puede actualizar heredando IteratorIterator.
Sus parámetros de construcción también deben ser iteradores, y la firma del parámetro en sí requiere un objeto que implemente la interfaz Traversable.
Ejemplo
la clase OutIterator extiende IteratorIterator { función pública rebobinar() { eco __METHOD__, PHP_EOL; devolver padre::rebobinar(); } función pública válida() { eco __METHOD__, PHP_EOL; devolver padre::válido(); } función pública actual() { eco __METHOD__, PHP_EOL; devolver padre::actual() '_suffix'; } clave de función pública() { eco __METHOD__, PHP_EOL; devolver padre::clave(); } función pública siguiente() { eco __METHOD__, PHP_EOL; devolver padre::siguiente(); } función pública getInnerIterator() { eco __METHOD__, PHP_EOL; devolver padre::getInnerIterator(); } } $iterador = nuevo OutIterator(nuevo ArrayIterator([1, 2, 3])); foreach ($iterador como $k => $v) { eco $k, ': ', $v, PHP_EOL; } // OutIterator::rebobinar // OutIterator::válido // OutIterator::actual // OutIterator::clave // 0: 1_sufijo // OutIterator::siguiente // OutIterator::válido // OutIterator::actual // OutIterator::clave // 1: 2_sufijo // OutIterator::siguiente // OutIterator::válido // OutIterator::actual // OutIterator::clave // 2: 3_sufijo // OutIterator::siguiente // OutIterator::válido
Lo anterior es la comprensión del iterador de empaquetado PHP, espero que sea útil para todos. Más guía de aprendizaje de PHP: red de código fuente