
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 学習ガイドの詳細:ソース コード ネットワーク