Я пытаюсь использовать закрытие в качестве обратного вызова, как только поток выполняется. Однако я сталкиваюсь с тем, что кажется пределом / неудачей PHP или расширения pthread.
Мой стек dev работает на Win7 x64 с PHP 5.5.3 x86 TS, pthread версии 0.44.
Следующий код работает:
class Test { public $callbackVar; } $test = new Test(); $callbackVar = function() { echo "Callback var invoked."; }; $test->callbackVar = $callbackVar; $test->callbackVar->__invoke();
Но как только я получаю Test from Thread, запуск скрипта дает ошибку :
class Test extends Thread { public $callbackVar; public function run() { } } $test = new Test(); $callbackVar = function() { echo "Callback var invoked."; }; $test->callbackVar = $callbackVar; // assert() returns true assert($test->callbackVar === null); $test->callbackVar->__invoke();
Со следующим выходом
Fatal error: Call to a member function __invoke() on a non-object
У кого-нибудь была эта проблема? Любое возможное обходное решение? Я бы предпочел не использовать eval, если это возможно … Я пробовал много обходных решений, таких как переключение на другое закрытие, использование ReflectionFunction, … ничто не сокращает его.