改进App类

This commit is contained in:
thinkphp
2017-03-01 19:08:04 +08:00
parent 27776728eb
commit 158f3e5ff0

View File

@@ -267,35 +267,40 @@ class App
if ($reflect->getNumberOfParameters() > 0) { if ($reflect->getNumberOfParameters() > 0) {
$params = $reflect->getParameters(); $params = $reflect->getParameters();
foreach ($params as $param) { foreach ($params as $param) {
$args[] = self::getParamValue($param,$type,$vars);
}
}
return $args;
}
private static function getParamValue($param,$type,$vars){
$name = $param->getName(); $name = $param->getName();
$class = $param->getClass(); $class = $param->getClass();
if ($class) { if ($class) {
$className = $class->getName(); $className = $class->getName();
$bind = Request::instance()->$name; $bind = Request::instance()->$name;
if ($bind instanceof $className) { if ($bind instanceof $className) {
$args[] = $bind; $result = $bind;
} else { } else {
if (method_exists($className, 'invoke')) { if (method_exists($className, 'invoke')) {
$method = new \ReflectionMethod($className, 'invoke'); $method = new \ReflectionMethod($className, 'invoke');
if ($method->isPublic() && $method->isStatic()) { if ($method->isPublic() && $method->isStatic()) {
$args[] = $className::invoke(Request::instance()); $result = $className::invoke(Request::instance());
continue; continue;
} }
} }
$args[] = method_exists($className, 'instance') ? $className::instance() : new $className; $result = method_exists($className, 'instance') ? $className::instance() : new $className;
} }
} elseif (1 == $type && !empty($vars)) { } elseif (1 == $type && !empty($vars)) {
$args[] = array_shift($vars); $result = array_shift($vars);
} elseif (0 == $type && isset($vars[$name])) { } elseif (0 == $type && isset($vars[$name])) {
$args[] = $vars[$name]; $result = $vars[$name];
} elseif ($param->isDefaultValueAvailable()) { } elseif ($param->isDefaultValueAvailable()) {
$args[] = $param->getDefaultValue(); $result = $param->getDefaultValue();
} else { } else {
throw new \InvalidArgumentException('method param miss:' . $name); throw new \InvalidArgumentException('method param miss:' . $name);
} }
} return $result;
}
return $args;
} }
/** /**