PHPのIteratorの履歴

Zend FrameworkSPLIterator使ってるのが多い。

http://php.net/manual/ja/language.oop5.iterations.php
http://www.php.net/manual/ja/spl.iterators.php
http://devzone.zend.com/article/2565

  • Iteratorインタフェースを実装すればforeachで回すことができる
  • IteratorAggregateインタフェースはgetIterator()を持つ。他のiteratorを持っていて、それを使いたい場合にproxy的に使う。
  • RecursiveIteratorインタフェースはツリー構造をトラバースする時に使えそうだけど、まだ使う機会がない
  • SeekableIteratorインタフェースはインデックス指定ができる。例えばZend_Service_Amazon_ResultSetが実装している。
  • OuterIteratorインタフェースはIteratorをラップする。getInnerIteratorを持つ。


例えばこな感じで配列から指定条件を指定数取得できるじゃね。

$it = new LimitIterator(new MyFilterIterator(new ArrayIterator($array)), 0, 10);
class MyFilterIterator extends FilterIterator{
  function accept(){
     // return boolean
  }
}