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();
  }