动态函数调用参数



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

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

例如,在此代码中,我们将三个变量请求、响应和服务传递给函数。它如何知道将请求类放入请求变量中,将响应类放入响应变量中,等等,无论变量的顺序如何?

是否有任何代码示例可以帮助我理解这一点?

谢谢!

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

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

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

$request

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

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

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

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

我不确定你所说的"无论变量的顺序如何"是什么意思。我认为回调需要以正确的顺序定义这些变量。

最新更新