Index: trunk/core/kernel/utility/factory.php =================================================================== diff -u -r2544 -r2592 --- trunk/core/kernel/utility/factory.php (.../factory.php) (revision 2544) +++ trunk/core/kernel/utility/factory.php (.../factory.php) (revision 2592) @@ -94,7 +94,7 @@ $funs_args = func_get_args(); array_splice($funs_args, 0, 3, Array($pseudo_class) ); - $this->Storage[$name] =& call_user_func_array( Array(&$this,'makeClass'), $funs_args); + $this->Storage[$name] =& ref_call_user_func_array( Array(&$this,'makeClass'), $funs_args); $this->Storage[$name]->Init($ret['prefix'],$ret['special'],$event_params); $prefix=$this->Storage[$name]->Prefix; @@ -144,7 +144,7 @@ { foreach($deps as $dep_class_name) { - $filename = $this->getFileByClassName($dep_class_name); + $filename = $this->Files[$dep_class_name]; k4_include_once($filename); } } @@ -165,25 +165,25 @@ */ function &makeClass($pseudo_class) { - $real_class=$this->realClasses[$pseudo_class]; + $real_class = $this->realClasses[$pseudo_class]; $this->includeClassFile($real_class); $mem_before = memory_get_usage(); $time_before = getmicrotime(); if( func_num_args() == 1 ) { - $class =& new $real_class(); + $class = new $real_class(); } else { $func_args = func_get_args(); $pseudo_class = array_shift($func_args); - $class =& call_user_func_array( Array($real_class,'makeClass'), $func_args ); + $class =& ref_call_user_func_array( Array($real_class,'makeClass'), $func_args ); } - if (defined('DEBUG_MODE') && DEBUG_MODE && dbg_ConstOn('DBG_PROFILE_MEMORY') ) + if( $this->Application->isDebugMode() && dbg_ConstOn('DBG_PROFILE_MEMORY') ) { $mem_after = memory_get_usage(); $time_after = getmicrotime(); @@ -194,18 +194,18 @@ $debugger->profilerAddTotal('objects', null, $mem_used); } return $class; - } /** * Registers new class in the factory * - * @param string $real_class - * @param string $file - * @param string $pseudo_class + * @param string $real_class Real name of class as in class declaration + * @param string $file Filename in what $real_class is declared + * @param string $pseudo_class Name under this class object will be accessed using getObject method + * @param Array $dependecies List of classes required for this class functioning * @access public */ - function registerClass($real_class,$file,$pseudo_class=null) + function registerClass($real_class,$file,$pseudo_class=null, $dependecies = Array() ) { if(!isset($pseudo_class)) $pseudo_class = $real_class; if(!isset($this->Files[$real_class])) $this->Files[$real_class]=$file; @@ -215,24 +215,30 @@ $this->registerDependency($real_class, $pseudo_class); } - if($pseudo_class == 'kCatDBEventHandler') + if($dependecies) { - echo ''; // TODO: fix that LinksEventHandler got ProductsEventHandler as it's pseudo_class :) + foreach($dependecies as $required_class) + { + $this->registerDependency($real_class, $required_class); + } } $this->realClasses[$pseudo_class]=$real_class; } + /** + * Add $class_name to required classes list for $depended_class class. + * All required class files are included before $depended_class file is included + * + * @param string $depended_class + * @param string $class_name + * @author Alex + */ function registerDependency($depended_class, $class_name) { $this->Dependencies[$depended_class][] = $this->realClasses[$class_name]; } - function getFileByClassName($class_name) - { - return getArrayValue($this->Files, $class_name); - } - } ?> \ No newline at end of file