450
1、本身也是一个迭代器,当被实例化时,又需要被传递到另一个迭代器内部保存,即内部迭代InnerIterator。
2、可通过继承IteratorIterator实现对原有迭代器功能的升级。
其构造参数也必须是迭代器,而参数签名本身就是需要一个对象,实现了Traversable接口。
实例
classOutIteratorextendsIteratorIterator { publicfunctionrewind() { echo__METHOD__,PHP_EOL; returnparent::rewind(); publicfunctionvalid() { echo__METHOD__,PHP_EOL; returnparent::valid(); publicfunctioncurrent() { echo__METHOD__,PHP_EOL; returnparent::current().'_suffix'; publicfunctionkey() { echo__METHOD__,PHP_EOL; returnparent::key(); publicfunctionnext() { echo__METHOD__,PHP_EOL; returnparent::next(); publicfunctiongetInnerIterator() { echo__METHOD__,PHP_EOL; returnparent::getInnerIterator(); $iterator=newOutIterator(newArrayIterator([1,2,3])); foreach($iteratoras$k=>$v){ echo$k,':',$v,PHP_EOL; //OutIterator::rewind //OutIterator::valid //OutIterator::current //OutIterator::key //0:1_suffix //OutIterator::next //OutIterator::valid //OutIterator::current //OutIterator::key //1:2_suffix //OutIterator::next //OutIterator::valid //OutIterator::current //OutIterator::key //2:3_suffix //OutIterator::next //OutIterator::valid