isis = $isis; $this->total = count($isis->fields); $this->keys = array_keys($isis->fields); $this->class = ($class == null) ? $isis : $class; // Find the first valid occurrence. $this->next(); } /** * Rewind the Iterator to the first valid element. */ function rewind() { $this->position = -1; $this->next(); } /** * Return the key of the current element. */ function key() { $type = $this->isis->getMapType($this->current()); return $this->isis->methodName($type); } /** * Return the current element. */ function current() { return $this->isis->fields[$this->keys[$this->position]]; } /** * Move forward to next element. The method should be callable, otherwise * we move to the next position. */ function next() { do { ++$this->position; } while (!is_callable(array($this->class, $this->key())) && $this->valid()); } /** * Check if there is a current element after calls to rewind() or next(). */ function valid() { return $this->position < $this->total - 1; } }