PHP是否等同于在JavaScript中设置超时?
在JavaScript中,您可以使用设置的超时功能在经过一定时间后执行代码。
是否可以在PHP中执行此操作?
答案 0 :(得分:4)
PHP是单线程的,通常PHP专注于HTTP请求周期,因此在请求完成后,允许超时运行代码是很棘手的。
我建议你研究Gearman作为将工作委托给其他PHP进程的解决方案。
答案 1 :(得分:2)
这很难看,但基本上有效:
<?php
declare(ticks=1);
function setInterval($callback, $ms, $max = 0)
{
$last = microtime(true);
$seconds = $ms / 1000;
register_tick_function(function() use (&$last, $callback, $seconds, $max)
{
static $busy = false;
static $n = 0;
if ($busy) return;
$busy = true;
$now = microtime(true);
while ($now - $last > $seconds)
{
if ($max && $n == $max) break;
++$n;
$last += $seconds;
$callback();
}
$busy = false;
});
}
function setTimeout($callback, $ms)
{
setInterval($callback, $ms, 1);
}
// user code:
setInterval(function() {
echo microtime(true), "\n";
}, 100); // every 10th of a second
while (true) usleep(1);
只有在可勾选的PHP语句之后才会调用间隔回调函数。因此,如果您尝试每秒调用一次函数10次,但是调用sleep(10)
,则在睡眠结束后,您将批量执行100次滴答功能。
请注意,setInterval
还有一个附加参数,用于限制调用它的次数。 setTimeout
只需拨打setInterval
即可获得一个限制。
如果unregister_tick_function
在过期后被调用会更好,但我不确定除非有一个监控和取消注册它们的主刻度函数,否则这是否可行。
我没有尝试实现类似的东西,因为这是不如何设计PHP。可能有更好的方法来做任何你想做的事情。
答案 2 :(得分:1)
您可以使用sleep()
功能:
int sleep ( int $seconds )
// Delays the program execution for the given number of seconds.
示例:
public function sleep(){
sleep(1);
return 'slept for 1 second';
}
答案 3 :(得分:0)
在不知道问题的用例的情况下,很难回答它: