在线程中存储闭包失败

我试图使用闭包作为一个线程完成运行后的callback。 不过,我正在运行似乎是PHP或pthread扩展的限制/失败。

我的开发堆栈运行在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(); 

但是一旦我从Thread中派生Test,运行这个脚本就会出错

 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重新包装到另一个闭包中,…没有任何东西会削减它。

Solutions Collecting From Web of "在线程中存储闭包失败"

Zend不允许你序列化闭包对象。

所以这不是你应该尝试解决的问题,可能在将来的某个时候,Zend将允许关闭系列化,当时pthreads不需要改变。

你只需要用老式的方式来做就可以了