/**
  * クラス名とファイルパスを取得、読み込み、UniFactoryへの委譲
  * 
  * @override
  * @access public
  * @param Array        UCLをパースした配列 classNameのみ必須
  * @param Array        [Optional] 初期化に用いる引数
  * @return Object or null
  */
 function &_initComponent($parts, $args = array())
 {
     $obj = null;
     //className is required
     if ($parts['className'] == "") {
         return $obj;
     }
     $className = $parts['className'];
     $classPath = str_replace('_', '/', $className) . ".php";
     //default type is constructor
     $initType = $parts['initType'] != "" ? $parts['initType'] : "constructor";
     //because file_exists does not search include_path.
     if (!@(include_once $classPath)) {
         return $obj;
     }
     $obj =& UniFactory::createInstance($className, $initType, $args, $parts['initOption']);
     /*
         最低限のエラーチェックだが、本来はもっとしっかりしたエラー処理
         (厳密なチェックという話ではなく、ユーザへの伝達機構)が必要
     */
     if (is_a($obj, 'PEAR_Error')) {
         //TODO : error raising ...
         return $obj;
     }
     return $obj;
 }
 /**
  * クラス名とファイルパスを取得、読み込み、UniFactoryへの委譲
  * 
  * @override
  * @access public
  * @param Array        URIをパースした配列 classNameとclassPathが必須
  * @param Array        [Optional] 初期化に用いる引数
  * @return Object or null
  */
 function &_initComponent($parts, $args = array())
 {
     $component = null;
     //className and classPath are required
     if ($parts['className'] == "" || $parts['classPath'] == "") {
         return $component;
     }
     $className = $parts['className'];
     $classPath = $this->_makeClassPath($parts, $className);
     //default init type is setter
     $initType = $parts['initType'] != "" ? $parts['initType'] : "setter";
     if (!@(include_once $classPath)) {
         return $component;
     }
     $component =& UniFactory::createInstance($className, $initType, $args, $parts['initOption']);
     return $component;
 }
 /**
  * クラス名とファイルパスを取得、読み込み、UniFactoryへの委譲
  * 
  * @override
  * @access public
  * @param Array     URIをパースした配列 classNameのみ必須
  * @param Array     [Optional] 初期化に用いる引数
  * @return Object or null
  */
 function &_initComponent($parts, $args = array())
 {
     $component = null;
     //className is required
     if ($parts['className'] == "") {
         return $component;
     }
     //default init type is setter.
     $initType = $parts['initType'] != "" ? $parts['initType'] : "setter";
     $dotSeparated = $parts['className'];
     $className = $this->_makeClassName($dotSeparated);
     if (!$this->_includeClass($dotSeparated, $className)) {
         return $component;
     }
     $component =& UniFactory::createInstance($className, $initType, $args, $parts['initOption']);
     return $component;
 }
 /**
  * $className のインスタンスを取得する
  * 
  * @static
  * @access public
  * @param string    setter|constructor|factory
  * @param Array        [Optional] arguments
  * @param mixed        [Optional] optional parameter (e.g factory-method's name)
  * @return Object or null
  */
 function &createInstance($className, $initType, $args = array(), $initOption = null)
 {
     $instance = null;
     if (isset($this) && is_a($this, 'UniFactory')) {
         /*
             インスタンスメソッドとして呼び出した場合、
             ”自分自身”の_createInstanceを起動する
         */
         $instance =& $this->_createInstance($className, $initType, $args, $initOption);
     } else {
         /*
             静的メソッドとして呼び出した場合、
             登録されているサブクラスの_createInstanceを起動する
         */
         $factory =& UniFactory::getFactory();
         $instance =& $factory->_createInstance($className, $initType, $args, $initOption);
     }
     return $instance;
 }