Я работаю с классом оболочки Thread, который может принимать функцию и вызывать эту функцию в новом потоке. Это мой класс до сих пор:Сохранение анонимной функции в переменной класса из __construct
public function __construct($cbCallback, $aParameters) {
$this->cbCallback = $cbCallback;
$this->aParameters = $aParameters;
$this->return = false;
}
public function run() {
if (is_array($this->cbCallback)) {
$this->return = call_user_func($this->cbCallback, ...($this->aParameters));
}
else {
$this->return = $this->cbCallback(...($this->aParameters));
}
}
И это работает, используя часть call_user_func при приеме в функции обратного вызова. Я хотел бы перегрузить класс, чтобы он мог также принимать замыкание вместо массива обратного вызова. У меня возникли проблемы с сохранением анонимной функции как переменной класса: она всегда хранится как null.
Я положил некоторые отладочные в конструкторе:
echo "Paramater test 1: " . json_encode($cbCallback);
$this->cbCallback = $cbCallback;
echo "Paramater test 2: " . json_encode($cbCallback);
echo "Variable test: " . json_encode($this->cbCallback);
Это дает выход:
Paramater test 1: {}
Paramater test 2: {}
Variable test: null
Я также попытался сделать $cbCallback
проход по ссылке с &$cbCallback
, что только приводит к ошибке что объект не может быть передан по ссылке.
Я чувствую, что есть либо специальное правило с анонимными функциями, либо что-то неуловимое происходит. Почему я не могу сохранить анонимную функцию в $ this-> cbCallback? Есть ли способ сохранить анонимную функцию в (не статической) переменной класса или что-то подобное, что будет работать одинаково, когда мне нужно вызвать эту функцию?
P.S. Я на PHP v5.6
Это прекрасно работает для меня. – jgivoni
, в какую версию php вы? Может возникнуть проблема с новейшей версией php. – TheBat
Не уверен, но если это проблема с 5.6, я не могу попробовать. – jgivoni