/** * クラス名とファイルパスを取得、読み込み、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; }