PHP IteratorIterator类如何工作?

Wil*_*tin 5 php spl iterator

尽我所能我无法理解IteratorIterator类实际上做的事情.我知道类可以实现Traversable,所以引擎知道它可以使用foreach循环,我意识到IteratorIterator应该将Traversable中的任何东西转换为Iterator,但我不能在生活中理解如何.

PDOStatement类为例; 如何实现标准迭代器方法(下一步,密钥,倒带等)以允许迭代PDOStatement?

对不起,如果我的问题不清楚,我只是在努力掌握这个课程的确切原因,而且关于它的文档很少.

谢谢,

更新:通过phpt文件,我发现一个使用IteratorIterator的测试:

<?php

$root = simplexml_load_string('<?xml version="1.0"?>
<root>
    <child>Hello</child>
    <child>World</child>
</root>
');

foreach (new IteratorIterator($root->child) as $child) {
    echo $child."\n";
}

?>
Run Code Online (Sandbox Code Playgroud)

预期的产出是:

Hello
World
Run Code Online (Sandbox Code Playgroud)

我并没有真正遵循IteratorIterator构造如何将$ root-> child作为参数以及它如何设法迭代子元素.

Sco*_*erg 2

基于,我认为它允许您迭代迭代对象。即,您可以拉出主对象中的其他对象,并在主对象上使用 IteratorIterator,也迭代子对象。

更新:基于您的更新。这对我来说很有意义,尽管只有一个根对象,因此迭代它在本示例中并不真正适用,但如果有更多根对象,则可以。换句话说,我相信 IteratorIterator 与嵌套的 foreach 循环相同,而不必知道每个对象的所有元素。换句话说,使用面向对象的对象的嵌套 foreach...存在冗余语句。:-)