`getInnerIterator()` 返回的值實際上是內部迭代器本身,而不是一個副本。使用它時需要注意:例如,在其上呼叫 `next()` 或 `rewind()` 將會推進或重置內部迭代器 — 儘管在您呼叫 `IteratorIterator` 物件的 `next()` 之前不會注意到效果 — 看起來它會快取其 `current()` 和 `key()` 值(截至 PHP v5.5.9)。即使內部迭代器本身有效(即 `valid()` 返回 TRUE),`IteratorIterator` 也不會將自身回報為有效,除非您重設它或呼叫其 `next()` 方法 — 這兩個方法會導致 `IteratorIterator` 將其目前的 `current`、`key` 和 `valid` 狀態與內部迭代器重新同步。
<?php
$ii = new IteratorIterator(new ArrayIterator(range(1,6)));
$i1 = $ii->getInnerIterator(); $i2 = $ii->getInnerIterator(); echo $i1->current(); echo $i1->key(); var_dump($ii->valid()); $i1->next(); echo $i1->key(); var_dump($ii->valid()); $ii->rewind(); echo $ii->key(); $i1->next(); echo $ii->key(); echo $i1->key(); $ii->next(); echo $ii->key(); echo $i1->key(); ?>