诚之和:怎么理解php包装迭代器
本篇内容介绍了“怎么理解php包装迭代器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
1、本身也是一个迭代器,当被实例化时,又需要被传递到另一个迭代器内部保存,即内部迭代InnerIterator。
2、可通过继承IteratorIterator实现对原有迭代器功能的升级。
其构造参数也必须是迭代器,而参数签名本身就是需要一个对象,实现了Traversable接口。
实例
class OutIterator extends IteratorIterator{
public function rewind() {
echo __METHOD__, PHP_EOL;
return parent::rewind();
}
public function valid() {
echo __METHOD__, PHP_EOL;
return parent::valid();
}
public function current() {
echo __METHOD__, PHP_EOL;
return parent::current() . '_suffix';
}
public function key() {
echo __METHOD__, PHP_EOL;
return parent::key();
}
public function next() {
echo __METHOD__, PHP_EOL;
return parent::next();
}
public function getInnerIterator() {
echo __METHOD__, PHP_EOL;
return parent::getInnerIterator();
}
}
$iterator = new OutIterator(new ArrayIterator([1, 2, 3]));foreach ($iterator as $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
赞 (0)
