Инструменты пользователя

Инструменты сайта


limb3_2007_2:ru:packages:datasource:lmb_iterator_decorator

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

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
   __    ___   _____  ____     __
  / /   / _ \ / ___/ /_  / __ / /
 / /__ / , _// (_ /   / /_/ // / 
/____//_/|_| \___/   /___/\___/
 
limb3_2007_2/ru/packages/datasource/lmb_iterator_decorator.txt · Последнее изменение: 2010/11/10 10:02 — 127.0.0.1