php从回调参数调用类方法

时间:2016-01-30 16:47:11

标签: php class parameters callback

从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->将不存在于回调范围内。

3 个答案:

答案 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');
});