SunshinePHP 2020

A classe CachingIterator

Introdução

...

Sinopse da classe

CachingIterator extends IteratorIterator implements OuterIterator , Traversable , Iterator , ArrayAccess , Countable {
/* Métodos */
public __construct ( Iterator $iterator [, int $flags = self::CALL_TOSTRING ] )
public count ( void ) : int
public current ( void ) : mixed
public getCache ( void ) : array
public getFlags ( void ) : int
public getInnerIterator ( void ) : Iterator
hasNext ( void ) : bool
public key ( void ) : scalar
next ( void ) : void
public offsetExists ( mixed $index ) : void
public offsetGet ( string $index ) : void
public offsetSet ( mixed $index , mixed $newval ) : void
public offsetUnset ( string $index ) : void
rewind ( void ) : void
public setFlags ( int $flags ) : void
__toString ( void ) : string
valid ( void ) : bool
}

Índice

add a note add a note

User Contributed Notes 2 notes

up
5
ahmad dot mayahi at gmail dot com
3 years ago
<?php
//This snippet will print out all the cached elements (foreach) .

$cache  = new CachingIterator(new ArrayIterator(range(1,100)), CachingIterator::FULL_CACHE);

foreach (
$cache as $c) {

}

print_r($cache->getCache());
?>
up
1
jerome at chaman dot ca
1 month ago
"cached iteration over another iterator" means this iterator is always one step behind the inner iterator. In other words, the "first" iteration will yield null:

<?php

$cit
= new CachingIterator( new ArrayIterator( [ 'a', 'b', 'c']  ) );

echo
$cit->current() ); // null
echo $cit->getInnerIterator()->current() ); // "a"

while($cit->hasNext()){
   
   
// we start with a "next" since the "first" item is null
    
$cit->next();
     echo
$cit->current(), '<br>';
  
}
?>

iterating this way gives us an access, ahead, to the future item (aka current item of the inner iterator)
To Top