我尝试使用睡眠和尝试方法。但它有时会失败。标准是什么?周围找不到任何明显的东西。感谢。
function foo($callback)
{
$bar->asyncCall($callback);
}
function testFoo()
{
$semaphore = 1;
foo(function() {
$semaphore = 0;
});
sleep(5) until $semaphore == 0;
}
使用这种方法,testFoo()有时永远不会返回。我怀疑某个地方陷入僵局。
答案 0 :(得分:2)
php范围变量的方式,您不会在测试中更改相同的$semaphore
变量。您正在传递给foo(...)
的匿名方法中创建一个新变量。
您需要使用use
关键字标记var。
function testFoo()
{
$semaphore = 1;
foo(function() use ($semaphore) {
$semaphore = 0;
});
$this->assertEquals(0, $semaphore);
}
不需要睡眠,因为这与我们从这里看到的不同步。有关$bar->asynCall()
的更多信息将是必需的。
在此处查看有关变量范围的更多信息:http://php.net/manual/en/functions.anonymous.php