lmbCollection
Класс lmbCollection реализует интерфейс lmbCollectionInterface. см. также Контейнеры данных
Класс lmbCollection используется в случах, когда нужно представить массив данных (вернее массив ассоцивных массивов) в виде итератора.
Возьмем самым простой пример. Мы создадим небольшой массив данных, сделаем из него lmbCollection и пройдемся по нему при помощи интерфейса Iterator.
$data = array ( array ('username' => 'jdoe', 'email' => 'jdoe@hotmail.com'), array ('username' => 'rsmith', 'email' => 'rsmith@cure.org'), array ('username' => 'nclark', 'email' => 'nclark@yahoo.com'), ); $rs = new lmbCollection($data); $str = ''; for($rs->rewind(); $rs->valid(); $rs->next()) { $record = $rs->current(); $str .= 'User: '. $record->get('username') . ' '; $str .= 'Email: '. $record->get('email') . "\n"; }
- rewind() - переводит внутренний счетчик в начальное положение
- valid() - проверяет не перещел ли внутренний счетчик за положенные границы
- next() - переводит внутренний счетчик на следующую позицию
- current() - возвращает объект класса Класс lmbSet, содержащий данные очередного элемента массива.
Так как lmbCollection реализует интерфейс Traversable, можно использовать более короткую форму прохождения по итератору через foreach():
$data = array (...); $iterator = new lmbCollection($data); foreach($iterator as $item) echo $item->get('username') . ' '; // выведет jdoe rsmith nclark
Так как lmbCollection реализует SPL интерфейс ArrayAccess можно написать и так:
$data = array(...); $iterator = new lmbCollection($data); echo sizeof($iterator); // выведет 3 echo $iterator[1]->get('username') // выведет rsmith
В качестве данных в lmbCollection можно прислать массив объектов класса lmbSet или любых других, которые поддерживают интерфейс lmbSetInterface:
$data = array ( new lmbSet(array('username' => 'jdoe', 'email' => 'jdoe@hotmail.com')), new lmbSet(array('username' => 'rsmith', 'email' => 'rsmith@cure.org')), new lmbSet(array('username' => 'nclark', 'email' => 'nclark@yahoo.com')), ); $iterator = new lmbCollection($data);
lmbCollection поддерживает лимитирование, например:
$data = array(...); $iterator = new lmbCollection($data); $iterator->paginate(1, 2); foreach($iterator as $item) echo $item->get('username') . ' ' . $item->get('email') . ' | '; // выведет rsmith rsmith@cure.org | nclark nclark@yahoo.com |
Кроме методов, характерных для интерфейса lmbCollectionInterface поддерживаем след. методы:
- add($item) - позволяет добавлять элементы в коллекцию.
- isEmpty() - возвращает true, если коллекция пустая
- toFlatArray() - возвращает массив массивов. Если данные, которые пришли в lmbCollection содержали объекты, поддерживающие интерфейс lmbSetInterface (как в примере выше), тогда этот метод будет вызывать export() для каждого элемента коллекции.
Дополнительные примеры по использованию класса lmbCollection см. в тестах:
- limb/core/tests/cases/lmbCollectionTest.class.php
- limb/core/tests/cases/lmbCollectionPaginationTest.class.php

Обсуждение