Intereting Posts
Схема включения среды разработки zend идеально настроена и не загружена Вызов неопределенного метода Illuminate \\ Database \\ Schema \\ Blueprint :: increments () подписывать запрос на использование твиттера с маркером oauth Изменение знака числа в PHP? Груша на окнах, отображающих разные номера версий Минимизировать HTML / PHP .htaccess защитить пароль, но разрешить типы файлов изображений PHP (WAMP) – Exlipse PDT, xDebug: не останавливается в точке останова Ошибка «function» mb_output_handler «не найден» в Laravel использование jquery + <audio> w / php / mysql для циклического воспроизведения времени воспроизведения Использовать JavaScript для stripslashes? возможное Как установить пользовательские ключи заголовка запроса с curl и PHP? php mysql – выполняет ли mysql автоматическую блокировку строк при обновлении? Сохранить как диалог, используя php / или html, чтобы сделать fwrite в пользовательском выборе Не удается получить желаемый шаблон для моих массивов

Сохранение замыканий в потоке не выполняется

Я пытаюсь использовать закрытие в качестве обратного вызова, как только поток выполняется. Однако я сталкиваюсь с тем, что кажется пределом / неудачей 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, … ничто не сокращает его.