$arrayIter = new ArrayIterator( array(1, 2) );
$iterIter = new IteratorIterator($arrayIter);

var_dump($iterIter->valid()); //false
var_dump($arrayIter->valid()); //true


如果我先调用$ iterIter-> rewind(),则$ iterIter-> valid()为true。我很好奇为什么它要求调用rewind()。我想这是有充分的理由的,但是我希望它可以在内部迭代器处于任何状态的情况下简单地开始迭代,并将其作为开始迭代之前回绕的选项。

调用next()似乎也将其置于“有效”状态(尽管它前进到了下一个位置,表明它先前位于第一个位置)。

$arrayIter = new ArrayIterator(array(1,2));
$iterIter = new IteratorIterator($arrayIter);

$iterIter->next();
var_dump($iterIter->valid());


再次,我很好奇,尽管内部迭代器处于有效状态,为什么还需要调用rewind()。

最佳答案

如果使用新的迭代器,则不会初始化位置,仅出于性能原因,您可以将迭代器堆叠在其他迭代器之上,如果所有迭代器在构建过程中都会倒退,则会对性能产生影响,此外,某些迭代器可能会在更改后更改其第一个值构造函数已执行-迭代器尚不了解。

迭代器通常由foreach()执行,后者先执行rewind()。

关于php - 为什么我必须倒带IteratorIterator,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2458955/

10-12 18:33