尽我所能,让我无法了解IteratorIterator类的实际作用。我知道类可以实现Traversable,因此引擎知道它可以使用foreach 循环。

PDOStatement类为例;如何实现标准的Iterator方法(下一个,键,后退等)以允许在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";
}

?>

预期的输出是:
Hello
World

我并不真正了解IteratorIterator构造如何以$ root-> child作为参数,以及它如何管理子元素。

最佳答案

基于this,我认为它可以迭代Iterated对象。 IE。您可以拉出主对象中的其他对象,并在主对象上使用IteratorIterator,还可以迭代子对象。

更新:根据您的更新。这对我来说很有意义,尽管只有一个根对象,所以在本示例中对其进行迭代实际上并不适用,但是如果有更多根对象,则可以这样做。换句话说,我相信IteratorIterator与嵌套的foreach循环相同,而不必知道每个对象的所有元素。换句话说,使用面向对象的对象嵌套的foreach ...有一个多余的语句。 :-)

关于php - PHP IteratorIterator类如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1366925/

10-12 16:04