PHP Conference Japan 2024

IteratorIterator::getInnerIterator

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

IteratorIterator::getInnerIterator获取内部迭代器

描述

public IteratorIterator::getInnerIterator(): ?Iterator

获取内部迭代器。

参数

此函数没有参数。

返回值

传递给 IteratorIterator::__construct() 的内部迭代器,或者当没有内部迭代器时为 null

添加注释

用户贡献的注释 1 条注释

0
c dot 1 at smithies dot org
8 年前
从 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(); // 同上:$i2 === $i1 且两者因此同步。
echo $i1->current(); // 1
echo $i1->key(); // 0
var_dump($ii->valid()); // FALSE
$i1->next(); // 影响 $i2,它与之相同
echo $i1->key(); // 1
var_dump($ii->valid()); // 仍然为 FALSE
$ii->rewind(); // 倒带 $i1 并同步
echo $ii->key(); // 0,如同 $i1->key()
$i1->next(); // 推进内部迭代器,现在已不同步
echo $ii->key(); // 仍然为 0
echo $i1->key(); // 1
$ii->next(); // 推进内部迭代器并与之同步
echo $ii->key(); // 2
echo $i1->key(); // 2
?>
To Top