/**
  * Constructor
  * @param string name of the corresponding class
  * @param string $type type consts 
  * @param false|epClassMap $class_map
  */
 public function __construct($name, $type = self::DT_CHAR, $class_map = false)
 {
     parent::__construct($name);
     $this->setType($type);
     if ($class_map) {
         $this->setClassMap($class_map);
     }
 }
 /**
  * Add a child
  * @param epBase a reference to the subchild to be added
  * @param bool whether to replace the existing child  with the same name
  * @return bool true if successful
  */
 public function addChild(epBase &$child, $replace = true)
 {
     // get the key from object
     eval('$id = $child->get' . $this->getChildrenKey() . '();');
     if (empty($id)) {
         return false;
     }
     // set this as the child's parent (if child is a container)
     if ($child instanceof epContainer) {
         $child->setParent($this);
     }
     // if replace or child not set
     if ($replace || !isset($this->children[$id])) {
         $this->children[$id] =& $child;
         return true;
     }
     // adding child failed
     return false;
 }