protected function traverseNode(Node $node) { foreach ($node->getSubNodeNames() as $name) { $subNode =& $node->{$name}; if (is_array($subNode)) { foreach ($this->traverseArray($subNode) as $rNode) { (yield $rNode); } } elseif ($subNode instanceof Node) { (yield $subNode); foreach ($this->traverseNode($subNode) as $rNode) { (yield $rNode); } } } }