Index: trunk/core/kernel/utility/factory.php
===================================================================
diff -u -r2597 -r2600
--- trunk/core/kernel/utility/factory.php (.../factory.php) (revision 2597)
+++ trunk/core/kernel/utility/factory.php (.../factory.php) (revision 2600)
@@ -1,15 +1,15 @@
$regs[1].$regs[3].$regs[4], 'special'=>$regs[2]);
-
+
$tmp=explode('_',$prefix_special,2);
$tmp[0]=explode('.',$tmp[0]);
@@ -65,8 +65,8 @@
$prefix_special.='.'.$special; // new2
return Array('prefix'=>$prefix,'special'=>$special,'prefix_special'=>$prefix_special);
}
-
-
+
+
/**
* Returns object using params specified,
* creates it if is required
@@ -78,28 +78,26 @@
*/
function &getObject($name,$pseudo_class='',$event_params=Array())
{
- // $name = 'l.pick', $pseudo_class = 'l'
- //echo 'N: '.$name.' - P: '.$pseudo_class."\n";
$ret=$this->processPrefix($name);
if (!$pseudo_class) $pseudo_class = $ret['prefix'];
$name=rtrim($name,'.');
if( isset($this->Storage[$name]) ) return $this->Storage[$name];
-
+
if(!isset($this->realClasses[$pseudo_class]))
{
if( $this->Application->isDebugMode() ) $GLOBALS['debugger']->appendTrace();
- trigger_error('RealClass not defined for pseudo_class '.$pseudo_class.'', E_USER_ERROR);
+ trigger_error('RealClass not defined for pseudo_class '.$pseudo_class.'', E_USER_ERROR);
}
-
+
$funs_args = func_get_args();
array_splice($funs_args, 0, 3, Array($pseudo_class) );
-
+
$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;
$special=$this->Storage[$name]->Special;
-
+
$event_manager =& $this->getObject('EventManager');
$event =& $event_manager->getBuildEvent($pseudo_class);
if($event)
@@ -111,21 +109,21 @@
}
$this->Application->HandleEvent($event);
}
-
+
return $this->Storage[$name];
}
-
-
+
+
/**
* Removes object from storage, so next time it could be created from scratch
*
* @param string $name Object's name in the Storage
*/
function DestroyObject($name)
{
- unset($this->Storage[$name]);
+ unset($this->Storage[$name]);
}
-
+
/**
* Includes file containing class
* definition for real class name
@@ -136,21 +134,20 @@
function includeClassFile($real_class)
{
if (class_exists($real_class)) return;
-
if(!$this->Files[$real_class]) trigger_error('Real Class '.$real_class.' is not registered with the Factory', E_USER_ERROR);
if(!file_exists($this->Files[$real_class])) trigger_error('Include file for class '.$real_class.' ('.$this->Files[$real_class].') does not exists', E_USER_ERROR);
-
+
if( $deps = getArrayValue($this->Dependencies, $real_class) )
{
foreach($deps as $dep_class_name)
{
$this->includeClassFile($dep_class_name);
}
}
-
+
k4_include_once($this->Files[$real_class]);
}
-
+
/**
* Get's real class name for pseudo class,
* includes class file and creates class
@@ -166,22 +163,20 @@
{
$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 =& ref_call_user_func_array( Array($real_class,'makeClass'), $func_args );
}
-
if( $this->Application->isDebugMode() && dbg_ConstOn('DBG_PROFILE_MEMORY') )
{
$mem_after = memory_get_usage();
@@ -194,11 +189,11 @@
}
return $class;
}
-
+
/**
* Registers new class in the factory
*
- * @param string $real_class Real name of class as in class declaration
+ * @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
@@ -208,23 +203,22 @@
{
if(!isset($pseudo_class)) $pseudo_class = $real_class;
if(!isset($this->Files[$real_class])) $this->Files[$real_class]=$file;
-
+
if( getArrayValue($this->realClasses, $pseudo_class) )
{
$this->registerDependency($real_class, $pseudo_class);
}
-
if($dependecies)
{
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
@@ -237,7 +231,6 @@
{
$this->Dependencies[$depended_class][] = $this->realClasses[$class_name];
}
-
}
?>
\ No newline at end of file