====== lmbIteratorDecorator ======
Класс lmbIteratorDecorator - абстрактный класс, используется в качестве базового при реализации декораторов итератора.
class SomeIteratorDecorator extends lmbIteratorDecorator
{
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 lmbIteratorDecorator
{
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 lmbEmptyIterator();
$this->iterator = $iterator;
return $this->iterator->rewind();
}