调用回调存储为成员变量


Call callback stored as member variable

是否可以使用php直接调用存储在类的成员变量中的回调?目前,我正在使用一个解决方案,我暂时将我的回调存储到一个本地变量。

class CB {
  private $cb;
  public function __construct($cb) {
    $this->cb = $cb;
  }
  public function call() {
    $this->cb(); // does not work
    $cb = $this->cb;
    $cb(); // does work
  }
}

php抱怨$this->cb()不是一个有效的方法,即不存在。

在php7中可以这样调用:

class CB {
  /** @var callable */
  private $cb;
  public function __construct(callable $cb) {
    $this->cb = $cb;
  }
  public function call() {
    ($this->cb)();
  }
}

您需要使用call_user_func:

class CB {
    private $cb;
    public function __construct($cb) {
        $this->cb = $cb;
    }
    public function call() {
        call_user_func($this->cb, 'hi');
    }
}
$cb = new CB(function($param) { echo $param; });
$cb->call(); // echoes 'hi'