1. Também é um iterador. Quando instanciado, precisa ser passado para outro iterador para armazenamento interno, ou seja, a iteração interna InnerIterator.
2. A função do iterador original pode ser atualizada herdando IteratorIterator.
Seus parâmetros de construção também devem ser iteradores, e a própria assinatura do parâmetro requer um objeto que implemente a interface Traversable.
Exemplo
classe OutIterator estende IteratorIterator { função pública retroceder() { eco __METHOD__, PHP_EOL; return pai::rebobinar(); } função pública válida() { eco __METHOD__, PHP_EOL; return pai::válido(); } função pública atual() { eco __METHOD__, PHP_EOL; retornar pai::atual() . } chave de função pública() { eco __METHOD__, PHP_EOL; retornar pai::chave(); } função pública próxima() { eco __METHOD__, PHP_EOL; return pai::próximo(); } função pública getInnerIterator() { eco __METHOD__, PHP_EOL; return parent::getInnerIterator(); } } $iterador = new OutIterator(new ArrayIterator([1, 2, 3])); foreach ($iterador as $k => $v) { echo $k, ': ', $v, PHP_EOL; } // OutIterator::rebobinar // OutIterator::válido // OutIterator::atual // OutIterator::chave // 0: 1_sufixo // OutIterator::próximo // OutIterator::válido // OutIterator::atual // OutIterator::chave // 1: 2_sufixo // OutIterator::próximo // OutIterator::válido // OutIterator::atual //OutIterator::chave // 2: 3_sufixo // OutIterator::próximo // OutIterator::válido
O texto acima é a compreensão do iterador de empacotamento PHP, espero que seja útil para todos. Mais guia de aprendizagem de PHP: rede de código-fonte