Позволяет ли PHP (5.4.x) создавать пользовательские итераторы , которые можно отбросить в петли foreach? (я видел пример итератора, который был довольно неуклюжим)Определить пользовательский Iterator в PHP 5.4.x?
Я получаю доступ к веб-API, который позволяет только вытягивать N строк/объектов за вызов, что приводит к неуклюжим локальному коду, то есть к внешнему циклу для захвата пакет данных из API и внутренний цикл для обработки элементов каждой партии.
я предпочел бы, чтобы подтолкнуть внешний контур в итератора (который тянет вниз блоки данных и отслеживает индекс во внешний API и т.д.), так что я могу писать код больше, как это:
$datastream = new ApiIterator(/*params here*/);
foreach($datastream as $row){
// do inner loop processing here
}
Благодаря!
Да, классы итераторов может быть немного неуклюжим из-за количества код шаблона, необходимый для написания базового итератора. Вам может быть интересно узнать, что PHP 5.5 (в настоящее время в бета-версии, окончательная версия ожидается в ближайшее время) включает функцию Generators, которая позволяет аналогичную функциональность итераторам, но с гораздо меньшим количеством кода. Есть еще случаи, когда было бы лучше написать итератор, но генераторы будут хорошей заменой для большинства более простых вариантов использования для итераторов. – Spudley