是否有类似于PHP的setTimeout()(JavaScript)的函数?

Lat*_*tze 26 javascript php settimeout

排序的问题说,这一切-有哪个不一样的功能的JavaScript函数的setTimeout()PHP?我搜索过php.net,我似乎找不到任何...

ars*_*ars 13

PHP不是事件驱动的,因此setTimeout没有多大意义.你当然可以模仿它,事实上,有人编写了一个你可以使用的Timer类.但是在用PHP在服务器端以这种方式开始编程之前我会小心.


Art*_*cto 11

有这个sleep功能,它会在一段确定的时间内暂停脚本.

另见usleep,time_nanosleeptime_sleep_until.


Pek*_*ica 11

没有办法延迟执行当前脚本中的部分代码.这也没有多大意义,因为PHP脚本的处理完全在服务器端进行,你只会延迟脚本的整体执行.有sleep(),但会简单地停止过程一定时间.

当然,您可以使用cron作业等安排PHP脚本在特定时间运行.

  • 定时事件没有意义,因为脚本在服务器端运行?我不是在追随这个论点.当然,由于没有并发性,它们在PHP中的用处不大,但是有一个脚本在特定的时间或特定时刻之后执行某些操作是有价值的. (8认同)
  • @Latze听起来像你想在客户端使用JavaScript做的事情,不是吗? (2认同)

Rob*_*bin 8

不是真的,但你可以尝试滴答计数功能.


Ale*_*exM 8

关于PHP中的计时器,我想注意一些事项:

1)PHP中的定时器在长时间运行的脚本(守护进程,也许是CLI脚本)中使用时有意义.因此,如果您没有开发这种应用程序,那么您不需要计时器.

2)定时器可以是阻塞和非阻塞.如果您正在使用sleep(),那么它是一个阻塞计时器,因为您的脚本只会冻结指定的时间.对于许多任务,阻止计时器是好的.例如,每10秒发送一次统计信息.可以阻止脚本:

while (true) {
    sendStat();
    sleep(10);
}
Run Code Online (Sandbox Code Playgroud)

3)非阻塞定时器仅在事件驱动的应用程序中有意义,例如websocket-server.在这样的应用程序中,事件可以随时发生(例如传入连接),因此您不能sleep()(显然)阻止您的应用程序.为此,有一些事件循环库,如reactphp/event-loop,它允许您以非阻塞方式处理多个流,并且还具有计时器/间隔功能.

4)PHP中的非阻塞超时是可能的. 它可以通过stream_select()带有timeout参数的函数来实现(请参阅它如何在reactphp/event-loop StreamSelectLoop :: run()中实现).

5)有PHP扩展一样libevent,libev,event这让计时器实现(如果你想要去的铁杆)