http://php.net/manual/en/iteratoraggregate.getiterator.php
Возвращаемые значения — «Экземпляр объекта, реализующего Iterator или Traversable»
1) То, что возвращается, всегда является экземпляром объекта, верно? (Я предполагаю, что да, но я хочу убедиться).
По этому URL: http://php.net/manual/en/class.iteratoraggregate.php
IteratorAggregate расширяет Traversable. Кто-то также сказал мне, что Итератор также расширяет Traversable. Traversable — это скорее внутренняя вещь (написанная на C, я полагаю), и она недоступна с уровня PHP.
Итератор, с которым я знаком, это текущий, ключ, следующий, перемотка, действительная «вещь». Итак, что возвращает getIterator, может реализовывать это, а если нет, то будет реализовывать что-то, что происходит из Traversable 100% времени? И Итератор не будет происходить из Traversable тогда?
Я имею в виду, это правильно, или я чего-то не понимаю?
Некоторые из классов в расширениях реализуют только Traversable, а не Iterator.
Список их можно найти здесь:
https://github.com/hakre/Iterator-Garden/blob/master/TRAVERSABLES.md
Пример кода (Traversable yes, а не Iterator):
https://eval.in/988102
Других решений пока нет …