调用回调存储为成员变量

发布于 2024-11-28 22:07:08 字数 355 浏览 0 评论 0原文

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

Is it possible with php to directly call a callback stored in an member variable of a class? currently I'm using a workaround, where I'm temporarily storing my callback to a local 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 complains that $this->cb() is not a valid method, i.e. does not exist.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

栖迟 2024-12-05 22:07:08

在php7中你可以这样调用它:

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

In php7 you can call it like this:

class CB {
  /** @var callable */
  private $cb;
  public function __construct(callable $cb) {
    $this->cb = $cb;
  }
  public function call() {
    ($this->cb)();
  }
}
森林迷了鹿 2024-12-05 22:07:08

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

You need to use 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'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文