Колкото и да се опитвам, не мога да разбера какво всъщност прави класът IteratorIterator. Разбирам, че класовете могат да имплементират Traversable, така че двигателят да знае, че може да прави цикъл с помощта на foreach и осъзнавам, че IteratorIterator трябва да преобразува всичко, което е Traversable, в Iterator, но не мога да разбера как.
Вземете например класа 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 като аргумент и как успява да обходи дъщерните елементи.