PHP Iterator

V PHP je možné implementovat objekt přes který jde iterovat pomocí foreach(). Pro tuto funkčnost je potřeba aby objekt implemetoval rozhraní Iterator.

Souhrou okolností jsem se k PHP dostal od jiných jazyků a v PHP je iterátor implementovany trošicku jinak nez tradiční pattern. Takže při implementaci Iterable objektu vždycky tak trochu tápu. Tohle je vlastně taková poznámka pro mě až to zas budu někde hledat.

Rozhraní iterátoru je jednoduché:

Iterator    extends  Traversable   {
/* Methods */
abstract public mixed current ( void )
abstract public scalar key ( void )
abstract public void next ( void )
abstract public void rewind ( void )
abstract public boolean valid ( void )
}

Problém je, co se vlastně děje při iteraci, jaké jsou volané metody, v jakém pořadí a co by měli dělat ;-)

Takže pseudokód pro iteraci pres foreach() je následující:

i::rewind();                        // presun na zacatek
while(i::valid()) {                 // je pozice iteratoru platna?
  $k = i::current(); $v = i::key(); // napln hodnoty
  i::next();                        // posun se na dalsi pozici
}

Toť pro dnešek vše.


Komentáře

Poslat nový komentář

Obsah tohoto pole je soukromý a nebude veřejně zobrazen.