Как бы я ни старался, я не могу понять, что на самом деле делает класс 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";
}
?>
Ожидаемый результат:
Hello
World
Я действительно не понимаю, как конструкция IteratorIterator принимает $root->child в качестве аргумента и как ей удается перебирать дочерние элементы.