今天,我使用了Klein Semi框架,我想了解一些对我来说非常重要的知识。
$klein->respond('/report/latest', function ($request, $response, $service) {
$response->file('/tmp/cached_report.zip');
});
例如,在此代码中,我们将三个变量request,response和service传递给函数。不管变量的顺序如何,如何知道将请求类放入请求变量,将响应类放入响应变量等?
有没有可以帮助我理解这一点的代码示例?
谢谢!
答案 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'
路由来创建路由。
这样的路由器类的想法是,您定义函数来处理与各种路由匹配的请求,并且当路由匹配时,路由器对象将调用您为其定义的函数并为其提供必要的参数。那时。
我不确定“无论变量的顺序”是什么意思。我认为回调需要以正确的顺序定义这些变量。