PHPのIteratorの履歴
Zend FrameworkはSPLのIterator使ってるのが多い。
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を持つ。
- ArrayIteratorクラス。arrayのIteratorにしたいときに
- DirectoryIteratorクラス。
- FilterIterator抽象クラス。OuterIteratorを実装。accept()でフィルタリングできる。callbackで指定できればわざわざクラス作らなくてもいいのになぁ。
- LimitIterator抽象クラス。指定位置から返したり、指定数を返したりできる。
例えばこんな感じで配列から指定条件を指定数取得できるんじゃね。
$it = new LimitIterator(new MyFilterIterator(new ArrayIterator($array)), 0, 10); class MyFilterIterator extends FilterIterator{ function accept(){ // return boolean } }