Bu amaç için CachingIterator kullanabilirsiniz.
İşte bir örnek:
$collection = new CachingIterator(
new ArrayIterator(
array('Cat', 'Dog', 'Elephant', 'Tiger', 'Shark')));
CachingIterator daima iç yineleyici arkasında bir adımdır:
var_dump( $collection->current() ); // null
var_dump( $collection->getInnerIterator()->current() ); // Cat
Eğer foreach
üzerinde yaptığınızda Böylece, $collection
, iç ArrayIterator mevcut eleman bunu içine peek sağlayan, zaten sonraki unsur olacaktır:
foreach($collection as $animal) {
echo "Current: $animal";
if($collection->hasNext()) {
echo " - Next:" . $collection->getInnerIterator()->current();
}
echo PHP_EOL;
}
Çıktısı:
Current: Cat - Next:Dog
Current: Dog - Next:Elephant
Current: Elephant - Next:Tiger
Current: Tiger - Next:Shark
Current: Shark
Ben izah edilemez nedense, CachingIterator her dize geçerli öğenin dönüştürmek için çalışacağız. Eğer bir nesne topluluğu üzerinde yineleme ve özelliklerinin bir yöntemlerine erişmek için gereken, kurucu ikinci parametre olarak CachingIterator::TOSTRING_USE_CURRENT
geçmek istiyorum.
Bir dipnot düşmek, CachingIterator o kadar iterated olan tüm sonuçları önbelleğe yeteneği isim alır. Bu çalışması için, CachingIterator::FULL_CACHE
ile oluşturmaya ve daha sonra getCache()
ile önbelleğe sonuçlar getirebilir var.