I have wanted something like this before. I used a trait helper. This
worked for this domain because there is an interface that is well
established for the helper to use. Here's an example (written in my
email client, untested):

trait OuterIteratorHelper {
  abstract function getInnerIterator(): \Iterator;
  function rewind(): void { $this->getInnerIterator()->rewind(); }
  function valid(): bool { return $this->getInnerIterator()->valid(); }
  function next(): void { $this->getInnerIterator()->next(); }
  function key() { return $this->getInnerIterator()->key(); }
  function current() { return $this->getInnerIterator()->current(); }
}

final class TransformIterator implements \OuterIterator {
  private $transformer, $inner;
  function __construct(callable $transformer, \Iterator $inner) {
    $this->transformer = $transformer;
    $this->inner = $inner;
  }

  use OuterIteratorHelper;
  function getInnerIterator() { return $this->inner; }

  function current() {
    return ($this->transformer)($this->inner->current());
  }
}

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to