Обратный вызов сохранен как переменная-член - PullRequest
5 голосов
/ 10 августа 2011

Возможно ли с помощью 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() не является допустимым методом, т.е. не существует.

Ответы [ 2 ]

7 голосов
/ 24 апреля 2017

В php7 это можно назвать так:

class CB {
  /** @var callable */
  private $cb;
  public function __construct(callable $cb) {
    $this->cb = $cb;
  }
  public function call() {
    ($this->cb)();
  }
}
6 голосов
/ 10 августа 2011

Вам нужно использовать 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...