Imo, простое использование одной или нескольких библиотек SPL в качестве интерфейса имеет тенденцию быть менее уродливым в использовании во внешнем интерфейсе. Тем не менее, поддержка реализации может быть немного уродливой.
Например, я написал итератор, который эффективно итерировал набор результатов базы данных, так что результаты, которые никогда не запрашивались, никогда не выбирались из указателя запроса, а если элементы выбирались преждевременно (IE: $ obj [5]), он будет искать все необходимые результаты во внутренний буфер.
Прекрасно сработало, вы просто молитесь, чтобы код, который делает магию за сценой, никогда не подводил, потому что он смущает людей, когда они видят, что вы используете нечто, похожее на массив, и делает «магию», которая может дать сбой:
Волшебство поджигало людей на костре. Поэтому используйте его осторожно и с умом, возможно, сделайте очевидным, как это работает.
Мои личные предпочтения -
for( $object as $i => $v )
обозначения для него, как правило, более последовательны и предсказуемы.
for( $dbresult->iterator() as $i => $v ){
}
стиль обозначения функционально идентичен, но, по крайней мере, у вас меньше догадок о том, как он работает на поверхности.