_mapper = $mapper; $this->_method = $method; $this->_arguments = $arguments; } /** * @see Countable::count() * @return integer */ public function count() { return count($this->getIterator()); } /** * @see IteratorAggregate::getIterator() * @return Traversable */ public function getIterator() { if ($this->_iterator === null) { $this->_iterator = call_user_func_array(array($this->_mapper, $this->_method), $this->_arguments); } return $this->_iterator; } /** * Route method calls to the iterator * * @param string $name * @param array $arguments * @return mixed */ public function __call($name, array $arguments) { return call_user_func_array(array($this->getIterator(), $name), $arguments); } }