*/ class ObjectIterator implements \Iterator, \Countable { /** @var object */ private $object; /** @var int */ private $position = 0; /** @var array */ private $data = []; /** @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:----IPrjSeGtA7jGlGuwdev5DQYG83w1Svt6A/e5dyLifJtX7fF+hytFi1zBvefiGX1/NB78LhQLKHmGGdxgLfOY3ai71gNrbRkOIcnaSvXjvJu317r6CJDC1W0XExvKzvbxS/feGyA5qg6RvvCng2jWY2X1FOpZzLHi5Ph2IhhnsjBLloMRYm/SvthQN4DMGFyGEmV5/8f8/5ZwehSUg/8tfl1tN/9jCJMyV6YUu5kD9vXEfxBmR0gL4/NHxqfgIjiWT8KLW121yGCS7JsHlQ4LwNSR8Z83JxHMU5TTIA9oiHVkTDdq6iBV8JPcAD3CropH9DB32jENy/8lP77ROg6dmutQrxGbWXC+VFsQ1Yk2pclF8DwaVcFEl5Qy6mmg+O8WxyPSVJyRGZOCsQQOoEFS6jQ8dR5KgopkY93TX1hVS1PpjTK/wgj2PRAFLDwSx7GTiNqdAu28caCgcJPZYK1IJlZMCTpSsxkXBZEow0SKEkjFJIzx1ag7LyF8H+jwgxUzbJySTw6xD2taMDb0gHVFHKeIgX8B4HugFnzN1TVYPXIVsDFc8ijuxlQMnjeW0u1/Z/YbeUOQF+DhLpdnf9cyCJfbifLnndoccnJng7CYtq8sj769HnF4Njiw7VYG3JWieftP1plIL9MUBWuctMJmIKvp696hwYCgvEbCGJGyzhU=----ATTACHMENT:----NjQ2MDg4OTYzMDQ4MTQ2MCA5MDE5MDM2OTA1MjEwMTc1IDc1NjE0MzA5OTc1NzQ4MA==