X-Git-Url: http://git.dj3c1t.com/?a=blobdiff_plain;f=mw%2Flibs%2Fempty_class.php;h=38e14ccdc6f3be6ccc225d85649ef7d7fff4dd00;hb=602f79f84ec77d24b0dddd8206fa3e9371aaaf11;hp=30814be61752fdd777d55ded10b60181d0e1a202;hpb=36ed114046cbe3d72a3589230e9f306a54fcc79d;p=mtweb diff --git a/mw/libs/empty_class.php b/mw/libs/empty_class.php index 30814be..38e14cc 100644 --- a/mw/libs/empty_class.php +++ b/mw/libs/empty_class.php @@ -70,8 +70,8 @@ $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); @@ -93,19 +93,31 @@ 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; } }