【发布时间】:2012-11-13 09:36:56
【问题描述】:
如果rewind()在while循环之前没有被调用,RecursiveIteratorIterator会返回额外的结果
例子
$array = array("A","B","C");
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
//$iterator->rewind() ; this would fix it
while ( $iterator->valid() ) {
print($iterator->current()) ;
$iterator->next();
}
输出
AABC <--- Instead of ABC
- 为什么要多一个
A而不是C? - 数组从未被初始化或调用,为什么 while 循环需要
$iterator->rewind() -
foreach完美运行,无需调用rewind使用迭代器时foreach和while之间的区别是什么
【问题讨论】:
-
如果你不调用 rewind,IteratorIterator 的行为也会很奇怪。 stackoverflow.com/questions/2458955/…
-
@rambocoder 刚刚也观察到了......这看起来更像是一个错误
-
我不理会它,因为如果我在写 spl,我的第一个直觉是编码它like this(只是转发方法调用),可能有一个 bool 变量来缓存返回值.但是,当我开始考虑像
CachingIterator这样的东西时,整个迭代器/装饰器范式是否仍然可以与像RecursiveIteratorIterator这样的复杂迭代器一起工作,并且会在疯狂的时刻抛出异常/错误,如果没有,想起来太复杂了很多努力。