====== lmbCollectionDecorator ======
Класс lmbCollectionDecorator - базовый класс, реализующий [[lmbCollectionInterface]], используется в качестве базового при реализации декораторов на коллекции.
class SomeIteratorDecorator extends lmbCollectionDecorator
{
function rewind()
{
parent :: rewind();
$this->_initImportantData();
}
function current()
{
$record = parent :: current();
$this->_processRecord($record);
return $record;
}
protected function _processRecord($record)
{
[...]
}
protected function _initImportantData()
{
[...]
}
}
Часто на практике **появляется необходимость полностью заменить декорируемый итератор**. Например, нам нужно сделать какую-либо выборку из базы данных, но для этого нам нужно знать содержимое всех элементов декорируемого итератора. Обычно это делается в методе rewind(). Не забудьте вызвать метод rewind() у нового декорируемого итератора, а также использовать какой-либо флаг для того чтобы знать, была ли проведена обработка или нет.
class SomeIteratorDecorator extends lmbCollectionDecorator
{
protected $processed = false;
function rewind()
{
parent :: rewind();
if(!$this->processed && $this->iterator->valid())
{
[...do some processing...]
$iterator = [...do some processing...]
$this->processed = true;
}
else
$iterator = new lmbCollection();
$this->iterator = $iterator;
return $this->iterator->rewind();
}