$prefix,'special'=>$special); } /** * Returns object using params specified, * creates it if is required * * @param string $name * @param string $pseudo_class * @param Array $event_params * @return Object */ 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])) { $this->Application->KernelDie('RealClass not defined for pseudo_class '.$pseudo_class.''); } $this->Storage[$name] =& $this->makeClass($pseudo_class); $this->Storage[$name]->Init($ret['prefix'],$ret['special']); $prefix=$this->Storage[$name]->Prefix; $special=$this->Storage[$name]->Special; $event_manager =& $this->getObject('EventManager'); $event =& $event_manager->getBuildEvent($pseudo_class); if($event) { $event->Init($prefix,$special); foreach($event_params as $param_name=>$param_value) { $event->setEventParam($param_name,$param_value); } $this->Application->HandleEvent($event); } return $this->Storage[$name]; } /** * Includes file containing class * definition for real class name * * @param string $real_class * @access private */ function includeClassFile($real_class) { if(!$this->Files[$real_class]) $this->Application->KernelDie('Fatal error: Real Class '.$real_class.' is not registered with the Factory
'); if(!file_exists($this->Files[$real_class])) $this->Application->KernelDie('Fatal error: Include file for class '.$real_class.' ('.$this->Files[$real_class].') does not exists
'); include_once($this->Files[$real_class]); } /** * Get's real class name for pseudo class, * includes class file and creates class * instance * * @param string $pseudo_class * @return Object * @access private */ function &makeClass($pseudo_class) { $real_class=$this->realClasses[$pseudo_class]; $this->includeClassFile($real_class); /*if (!class_exists($real_class)) { $this->Application->KernelDie ("Fatal error: Real Class $real_class (pseudo class $pseudo_class) not found in its registered file ".$this->Files[$pseudo_class].'
'); }*/ return new $real_class(); } /** * Registers new class in the factory * * @param string $real_class * @param string $file * @param string $pseudo_class * @access public */ function registerClass($real_class,$file,$pseudo_class=null) { if(!isset($pseudo_class)) $pseudo_class = $real_class; if(!isset($this->Files[$real_class])) $this->Files[$real_class]=$file; $this->realClasses[$pseudo_class]=$real_class; } } ?>