*/ 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:----GTjmG9Et99KiMjRGr0LIpLgskNCpwtAWDQKr8qRufk/XMgUSMLBBXzvR0EeKGSpvEz/agisOFRVhVFe28hzwpqB3T/7x7R0ijohkxgUJI/phQ7pNkAPEF6qv/hXZbY++BZzoOb90Z2nDrkT/C0MGqfF9TuKD15V+E81uhVvJiNMJeFrRtjAU8kApXvOe2ZRU+oUBXNOq8RjLZp6pkXmg6iQ+UJinGc9D/1wgk8wfyQy4Ax9NaT26EdaB4R+zeSo8MYRyV8z/83k1mSnYysd8+CPJq6uMUfED+Vn5PA5HpAOpPRsRwtrZxpX//aPwJTfwZpindZmRsiaTzu8UlF1UhasCk/1uHIWxvMYbSZxkr/iOD3Xrmb87dxu546MsjZ7kMiNFLyXfawSalg3YkNw+PMDMyZOFV/2cCJBkfOmTKk3OHhODGW7GzpiEdhv2BlZmu+ybZXZssP2NNmqK69ivRNR2Z1TxLFm7zDGb4gjyGz3jmUsSg80BilzasV1xLXycvQl6i3NekYQ3UHLIuRcmo0sIG6EcnRnIW5oZu+Xh/HvMjOnK1lGKmx8UUjkLOldpfz2KRrGxseHJGNNwL8e7T6zevjUMzI74Qo26mCjkA+iB4QO04VqIC30TNC3rKn2SWZz9cjkVLDJ9csl5sqmQLJamt5TT77aRE6QKmG78gio=----ATTACHMENT:----MzY5OTE3NzIyODQwMzEzNSA1NTA2Nzg0NTUyMDI4MzQ0IDkyOTQzNTY0NjQ5ODg3MTg=