将回调存储为成员变量

时间:2011-08-10 15:05:48

标签: php callback

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

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()不是有效的方法,即不存在。

2 个答案:

答案 0 :(得分:6)

在php7中你可以这样称呼它:

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

答案 1 :(得分:5)

您需要使用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'