} function handleMethod(Module $module, ReflectionMethod $method, $params) { $name = $method->getName(); // имя метода $args = $method->getParameters(); // имя аргумента метода //проверка являеется ли метод "установщиком" (set) if (count($args) != 1 || substr($name, 0, 3) != "set") { return false; } $property = strtolower(substr($name, 3)); // получаем имя свойства if (!isset($params[$property])) { // проверяем есть ли такое свойство в асоциативном массиве с параметрами return false; } $arg_class = $args[0]->getClass(); // узнаём тип аргумента метода установщика if (empty($arg_class)) { // если у аргумента нету типа, значит это не объект $method->invoke($module, $params[$property]); // если не объект, то передаём нашему "модулю" обычный параметр } else { $method->invoke($module, $arg_class->newInstance($params[$property])); // если это объект, то передаём тип (класс) аргумента, и его значение, создаём объект и передаем его нашему "модулю" } } } $o = new ModuleRunner(); $o->init();
$this->handleMethod($moduleObj, $methodflection, $params); } array_push($this->modules, $moduleObj); } } function handleMethod(Module $modleObj, ReflectionMethod $methodReflection, $params) { //var_dump($methodReflection); $name = $methodReflection->getName(); $args = $methodReflection->getParameters(); if (count($args) != 1 or substr($name, 0, 3) != 'set') { return false; } $property = strtolower(substr($name, 3)); if (!isset($params[$property])) { return false; } $args_class = $args[0]->getClass(); if (empty($args_class)) { $methodReflection->invoke($modleObj, $params[$property]); } else { $methodReflection->invoke($modleObj, $args_class->newInstance($params[$property])); } } } $handle = new ModuleRunner(); $handle->init(); /*$ftpreflection=new ReflectionClass('FtpModule'); $rs=$ftpreflection->getMethods(); var_dump($rs); var_dump($rs[0]->getName());*/
throw new Exception("unknown module type: {$modulename}"); } $module = $module_class->newInstance(); foreach ($module_class->getMethods() as $method) { $this->handleMethod($module, $method, $params); // we cover handleMethod() in a future listing! } array_push($this->modules, $module); } } function handleMethod(Module $module, ReflectionMethod $method, $params) { $name = $method->getName(); $args = $method->getParameters(); if (count($args) != 1 || substr($name, 0, 3) != "set") { return false; } $property = strtolower(substr($name, 3)); if (!isset($params[$property])) { return false; } $arg_class = $args[0]->getClass(); if (empty($arg_class)) { $method->invoke($module, $params[$property]); } else { $method->invoke($module, $arg_class->newInstance($params[$property])); } } } $test = new ModuleRunner(); $test->init();