2013-04-21 3 views
2

Позволяет ли 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 
} 

Благодаря!

+1

Да, классы итераторов может быть немного неуклюжим из-за количества код шаблона, необходимый для написания базового итератора. Вам может быть интересно узнать, что PHP 5.5 (в настоящее время в бета-версии, окончательная версия ожидается в ближайшее время) включает функцию Generators, которая позволяет аналогичную функциональность итераторам, но с гораздо меньшим количеством кода. Есть еще случаи, когда было бы лучше написать итератор, но генераторы будут хорошей заменой для большинства более простых вариантов использования для итераторов. – Spudley

ответ

1

Можно с PHP 5.0, необходимо использовать интерфейс РНР класса итератора (http://php.net/manual/en/class.iterator.php) и расширить его (реализации) в вашем ApiIterator класса

Смежные вопросы