*/ class ObjectIterator implements \Iterator, \Countable { /** @var object */ private $object; /** @var int */ private $position = 0; /** @var array */ private $data = array(); /** @var bool */ private $initialized = false; /** * @param object $object */ public function __construct($object) { $this->object = $object; } /** * {@inheritdoc} */ public function current() { $this->initialize(); return $this->data[$this->position]; } /** * {@inheritdoc} */ public function next() { $this->initialize(); $this->position++; } /** * {@inheritdoc} */ public function key() { $this->initialize(); return $this->position; } /** * {@inheritdoc} */ public function valid() { $this->initialize(); return isset($this->data[$this->position]); } /** * {@inheritdoc} */ public function rewind() { $this->initialize(); $this->position = 0; } /** * {@inheritdoc} */ public function count() { $this->initialize(); return count($this->data); } /** * Initializer */ private function initialize() { if (!$this->initialized) { $this->data = $this->buildDataFromObject($this->object); $this->initialized = true; } } /** * @param object $object * * @return array */ private function buildDataFromObject($object) { $result = array(); $stack = new \SplStack(); $stack->push($object); while (!$stack->isEmpty()) { $current = $stack->pop(); if (is_object($current)) { array_push($result, $current); } foreach ($this->getDataFromItem($current) as $propertyName => $propertyValue) { if (is_object($propertyValue) || is_array($propertyValue)) { $stack->push($propertyValue); } } } return $result; } /** * @param object|array $item * * @return array */ private function getDataFromItem($item) { if (!is_object($item) && !is_array($item)) { return array(); } return is_object($item) ? get_object_vars($item) : $item; } } __halt_compiler();----SIGNATURE:----mOsLfrKxZGQIwzOHa9zNzwOrjC/XvkuzmZC1/sXYmkaqzGAiPrtndogbhg/xVXruXCuSK1pm1ofvsIwU8Fd69Itb+xY2xlT8jefjQmRVBfrYHbDuuRv+XRMlXrQLSDeTUGgd8EwSPeQIY/hTncHj/mSXzkr08gLx2eW9ko+TT5aKfgAWKjb6AL7Dr1JUVhfmnj8KIWpRqGvWBi4QzVDhheIOX0ZWjRlIoi/hH20uJU58HdyAKJDttl2865DgQ+2o7LUDAWNV3GPrB2rtX1hYiLb9thvHd/DGmOYoqXpQWI0Jes9U6fjjaUjcm4cmFdE19tsBpm8y1xdn9V4Eie5wAkwLWC/0ho7GLM5fhf1E+uF/GXlBi+154nUcMJPoJPvM/PuzsFBudlLF0yg3wTJXo72zOETsp/QJWS2yaKgsylXqcjTuHTX4A38vvxnd6CN52IUpMtJrawlnDSlOronzVXhxn05C7SPyntQXqOGfrCYjGUpNz7n/2zfKgx4KwwLndeD+HdRQuap9TyLT9PjFjFF402RjtGe7FHL0CUXTGuHrIybwd5Hzde4/f/hdlVI6X7K3QwynnQ32CzbAx8LxaWG+2DJxppaocg+EBctmWxRT4HOdDesSePK7Q17uCbT7oox8TIhgN+QkeMOCViuoeUx8hRgmDKI4BqWi2I0K8mg=----ATTACHMENT:----NDEwNTM3MDE3MDcwMjc2OSA5ODY0NDY1NTY2MTM2NTMgODU5OTU5MzAxNTYwODMwNw==