动态函数调用参数

时间:2018-08-21 20:37:49

标签: php callback frameworks arguments

今天,我使用了Klein Semi框架,我想了解一些对我来说非常重要的知识。

$klein->respond('/report/latest', function ($request, $response, $service) {
     $response->file('/tmp/cached_report.zip');
});

例如,在此代码中,我们将三个变量request,response和service传递给函数。不管变量的顺序如何,如何知道将请求类放入请求变量,将响应类放入响应变量等?

有没有可以帮助我理解这一点的代码示例?

谢谢!

2 个答案:

答案 0 :(得分:0)

不熟悉该框架,但是根据您的解释,我认为它们正在使用反射来获取您提供给闭包的参数的名称和顺序。您可以在这里看到一个示例:(https://3v4l.org/jjWa1

$closure = function ($request, $response, $service) {
     $response->file('/tmp/cached_report.zip');
};

$reflected = new ReflectionFunction($closure);
var_dump($reflected->getParameters());

ReflectionFunction允许您获取有关函数定义的详细信息。

答案 1 :(得分:0)

$request$response$service在当前范围内不是要传递给该函数的变量。

function ($request, $response, $service) { $response->file('/tmp/cached_report.zip'); }

是一个匿名函数,您将作为第二个参数传递给$respond的回调。因此,在您调用$klein->respond()时尚未定义该函数的参数。您正在做的是通过将回调分配给$klein对象来处理'/report/latest'路由来创建路由。

这样的路由器类的想法是,您定义函数来处理与各种路由匹配的请求,并且当路由匹配时,路由器对象将调用您为其定义的函数并为其提供必要的参数。那时。

我不确定“无论变量的顺序”是什么意思。我认为回调需要以正确的顺序定义这些变量。