Класс 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"; }
Так как 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 поддерживаем след. методы:
Дополнительные примеры по использованию класса lmbCollection см. в тестах:
Обсуждение