从A类我想实现一个包含特定方法作为参数的回调。例如
call_user_func_array($callback, ['$this->get', '$this->post']);
然而,这不起作用。我的目标是做到这一点:
的index.php
$API = new API();
$API->state('/users', function ($get, $post) {
$get('/', 'UserController.getAll');
});
API.php
public function state ($state, $callback) {
call_user_func_array($callback, ['$this->get', '$this->post']);
}
public method get ($uri, $ctrl) { echo 'getting'; }
public method post ($uri, $ctrl) { echo 'posting'; }
感谢任何输入! 我确实意识到使用$ this->方法,将无法使用$ this->将不存在于回调范围内。
答案 0 :(得分:0)
因为您使用的是对象方法而不是全局函数作为回调,所以必须使用call_user_method_array
而不是call_user_func_array
。
答案 1 :(得分:0)
我发现我不得不将$ this绑定到正确的范围。 我设法通过在每个参数中包含$ this(类即时)来实现这一点:
call_user_func_array($callback, [ [$this, 'get'] ]);
答案 2 :(得分:0)
如果您只需要访问公共成员和方法,那么一个可能的解决方案就是:
class API{
public function state ($state, $callback) {
call_user_func($callback, $this);
}
public function get ($uri, $ctrl) { echo 'getting'; }
public function post ($uri, $ctrl) { echo 'posting'; }
}
$API = new API();
$API->state('/users', function ($context) {
$context->get('/', 'UserController.getAll');
});