一旦线程完成运行,我正在尝试使用闭包作为回调。但是,我遇到了似乎是 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,......没有什么可以解决的。