$file = $v_path[count($v_path) - 1];
if(strcasecmp(substr($file, -4), ".php") == 0){
$class_name = substr($file, 0, -4);
- if(!class_exists($class_name)){
- require_once $module_file;
+ if(!isset($this->modules[$class_name])){
+ if(!class_exists($class_name)) require_once $module_file;
if(version_compare(PHP_VERSION, '5.0.0', '>=')){
if(class_exists($class_name) && !isset($this->modules[$class_name])){
$this->modules[$class_name] = new $class_name($root_inst);
function empty_class_call($inst, $method_name, $arguments){
$r = false;
- $args = "";
- foreach($arguments as $i => $arg) $args .= ($args ? ", " : "")."\$arguments[".$i."]";
- if(isset($inst->modules)) foreach($inst->modules as $module_name => $module){
- if(method_exists($module, $method_name)){
- eval("\$r = \$module->".$method_name."(".$args.");");
+ if(($module = $this->get_module_for_method($inst, $method_name)) !== false){
+ $args = ""; foreach($arguments as $i => $arg) $args .= ($args ? ", " : "")."\$arguments[".$i."]";
+ eval("\$r = \$module->".$method_name."(".$args.");");
+ }
+ else $r = $this->call_default($inst, $method_name, $arguments);
+ return $r;
+ }
+
+ function get_module_for_method($inst, $method_name){
+ $module = false;
+ if(isset($inst->modules)) foreach($inst->modules as $module_name => $module_impl){
+ if(method_exists($module_impl, $method_name)){
+ $module = $module_impl;
break;
}
else{
- $r = $this->empty_class_call($module, $method_name, $arguments);
- if($r !== false) break;
+ $module = $this->get_module_for_method($module_impl, $method_name);
+ if($module !== false) break;
}
}
- return $r;
+ return $module;
+ }
+
+ function call_default($inst, $method_name, $arguments){
+ return false;
}
}