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 也不会报告它自己有效,直到你 either 重置它或者调用它的 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