1. これは、それ自体がイテレータでもあり、インスタンス化されると、内部ストレージ用の別のイテレータ、つまり内部イテレーション InnerIterator に渡す必要があります。
2. 元のイテレータ関数は、IteratorIterator を継承することでアップグレードできます。
その構築パラメータもイテレータである必要があり、パラメータ シグネチャ自体には Traversable インターフェイスを実装するオブジェクトが必要です。
例
クラス OutIterator extends IteratorIterator { パブリック関数 rewind() { エコー __METHOD__、PHP_EOL; 親を返す::rewind(); } パブリック関数 valid() { エコー __METHOD__、PHP_EOL; 親::有効()を返します; } パブリック関数 current() { エコー __METHOD__、PHP_EOL; '_suffix' を返します。 } パブリック関数キー() { エコー __METHOD__、PHP_EOL; 親::key() を返します。 } パブリック関数 next() { エコー __METHOD__、PHP_EOL; 親::next() を返します。 } パブリック関数 getInnerIterator() { エコー __METHOD__、PHP_EOL; 親を返す::getInnerIterator(); } } $iterator = new OutIterator(new ArrayIterator([1, 2, 3])); foreach ($iterator as $k => $v) { エコー $k, ': ', $v, PHP_EOL; } // OutIterator::rewind // OutIterator::valid // OutIterator::current // OutIterator::key // 0:1_サフィックス // OutIterator::next // OutIterator::valid // OutIterator::current // OutIterator::key // 1:2_サフィックス // OutIterator::next // OutIterator::valid // OutIterator::current // OutIterator::key // 2: 3_suffix // OutIterator::next // OutIterator::valid
以上が PHP パッケージ化イテレータの理解です。皆様のお役に立てれば幸いです。 PHP 学習ガイドの詳細:ソース コード ネットワーク