__uniqid = uniqid(rand(), true); $this->name = $name; $this->parent = null; $this->children = array(); } function addChild(&$child) { if (!is_object($child) || !is_a($child, 'Component')) return false; if ($child->parent != null) $child->parent->removeChild($child); $this->children[] =& $child; return true; } function removeChild(&$child) { if (!is_object($child) || !is_a($child, 'Component')) return false; for ($i = 0; $i < count($this->children); $i++) { if (isset($this->children[$i]) && $this->children[i] === $child) { unset($this->children[$i]); $this->children[$i]->parent = null; return true; } } return false; } function display($depth = 0) { echo str_repeat('-', $depth).$this->name."\n"; foreach($this->children as $el) $el->display($depth +2); } } $node = new Component('node'); $node1 = new Component('node1'); $node11 = new Component('node11'); $node12 = new Component('node12'); $node121 = new Component('node121'); $node122 = new Component('node122'); $node13 = new Component('node13'); $node2 = new Component('node2'); $node3 = new Component('node3'); $node31 = new Component('node31'); $node32 = new Component('node32'); $node->addChild($node1); $node1->addChild($node11); $node1->addChild($node12); $node12->addChild($node121); $node12->addChild($node122); $node1->addChild($node13); $node->addChild($node2); $node->addChild($node3); $node3->addChild($node31); $node3->addChild($node32); $node->display(1); ?>