如何将方法作为参数传递给函数,以便可以从函数调用它?
我正在尝试将 Slim Framework 的 redirect()
方法从路由处理程序传递到处理重定向逻辑的对象方法:
$app->get('/contact', function() use ($app) {
$obj = new Obj;
$obj->handle_request($app->redirect);
});
然后在对象方法中:
public function handle_request(callable $redirect) {
$redirect('/about');
}
这给了我这个错误:Argument 1 passed to Obj::handle_request() must be callable, null given
如果我在没有callable
类型提示的情况下做同样的事情,我会收到此错误:Function name must be a string
地使用了可调用提示。根据文档:
PHP 函数按其名称作为字符串传递。
。
实例化对象的方法作为数组传递,该数组包含索引 0 处的对象和索引 1 处的方法名。
因此,在您的情况下,您需要将其传递为array($app, 'redirect')
:
$app->get('/contact', function() use ($app) {
$obj = new Obj;
$obj->handle_request(array($app, 'redirect'));
});
但是,在您的情况下,正如其他答案所述,除非您所做的不仅仅是在handle_request
中调用redirect
或有以这种方式传递回调的特定要求,否则您可能最好只是将$app
传递给handle_request
并让它用$app
本身做它需要的事情。这是一个更好的 OO 模式。
您只需传递$app object
,然后从那里调用 redirect
方法。
例
$app->get('/contact', function() use ($app) {
$obj = new Obj;
$obj->handle_request($app);
});
public function handle_request($app) {
$app -> redirect('/about');
}
希望这对:)有所帮助