Я пытаюсь использовать замыкание в качестве обратного вызова, когда поток выполняется. Однако я сталкиваюсь с тем, что кажется пределом/неудачей 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();
Но как только я получить тест из ниток, запустив скрипт выдает ошибку:
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, ... ничто не сокращает его.
Какую версию PHP вы используете? – MisterBla
Обновленный вопрос, забыли об этом ... –
Я сделал [3v4l] (http://3v4l.org/RnEgH) вашего кода. Между 5.3 и 5.5.2 ошибок нет. Не уверен, что происходит дальше. – MisterBla