think\App::bindParams PHP Method

bindParams() private static method

绑定参数
private static bindParams ( ReflectionMethod | ReflectionFunction $reflect, array $vars = [] ) : array
$reflect ReflectionMethod | ReflectionFunction 反射类
$vars array 变量
return array
    private static function bindParams($reflect, $vars = [])
    {
        if (empty($vars)) {
            // 自动获取请求变量
            if (Config::get('url_param_type')) {
                $vars = Request::instance()->route();
            } else {
                $vars = Request::instance()->param();
            }
        }
        $args = [];
        // 判断数组类型 数字数组时按顺序绑定参数
        reset($vars);
        $type = key($vars) === 0 ? 1 : 0;
        if ($reflect->getNumberOfParameters() > 0) {
            $params = $reflect->getParameters();
            foreach ($params as $param) {
                $name = $param->getName();
                $class = $param->getClass();
                if ($class) {
                    $className = $class->getName();
                    $bind = Request::instance()->{$name};
                    if ($bind instanceof $className) {
                        $args[] = $bind;
                    } else {
                        $args[] = method_exists($className, 'instance') ? $className::instance() : new $className();
                    }
                } elseif (1 == $type && !empty($vars)) {
                    $args[] = array_shift($vars);
                } elseif (0 == $type && isset($vars[$name])) {
                    $args[] = $vars[$name];
                } elseif ($param->isDefaultValueAvailable()) {
                    $args[] = $param->getDefaultValue();
                } else {
                    throw new \InvalidArgumentException('method param miss:' . $name);
                }
            }
            // 全局过滤
            array_walk_recursive($args, [Request::instance(), 'filterExp']);
        }
        return $args;
    }