php不支持定时器么,PHP没有定时器?
确实,PHP没有类似于JS中的setInterval或者setTimeout这样的原生定时器相关的函数。但是我们可以通过其他方式来实现,比如使用declare。
先来看看是如何实现的,然后我们再好好学习一下declare表达式到底是个什么东西。
function do_tick($str = '')
{
list($sec, $usec) = explode(' ', microtime());
printf("[%.4f] Tick.%s\n", $sec + $usec, $str);
}
register_tick_function('do_tick');
do_tick('--start--');
declare (ticks = 1) {
while (1) {
sleep(1); // 这里,每执行一次就去调用一次do_tick()
}
}
很简单的代码,运行起来以后将每秒输出当前的时间。
declare语法的定义如下:
declare (directive)
statemaent;
declare 结构用来设定一段代码的执行指令
directive 部分允许设定 declare 代码段的行为。目前只认识两个指令:ticks以及 encoding
Tick(时钟周期)是一个在 declare 代码段中解释器每执行 N 条可计时的低级语句就会发生的事件。N 的值是在 declare 中的 directive 部分用 ticks=N 来指定的
在每个 tick 中出现的事件是由 register_tick_function() 来指定的
这里,我们只研究ticks的使用。
上述代码中,我们使用register_tick_function()注册了do_tick()方法给ticks,declare指定了ticks=1,也就是每执行一次可计时的低级语句,就会去执行一次register_tick_function()中注册的方法。当declare代码块中的while每次循环时,都有一个sleep()停顿了一秒,而这个sleep()就是那个可计时的低级语句。
那么,while()不是可计时的低级语句嘛?当然不是,where、if等条件判断都不是这种可计时的低级语句。
不是所有语句都可计时。通常条件表达式和参数表达式都不可计时。
我们通过下面这个例子再来看看具体到一步步declare是怎样执行的:
function test_tick()
{
static $i = 0;
echo 'test_tick:' . $i++, PHP_EOL;
}
register_tick_function('test_tick');
test_tick(); // test_tick:0
$j = 0;
declare (ticks = 1) {
$j++; // test_tick:1
$j++; // test_tick: 2
sleep(1); // 停1秒后,test_tick:3
$j++; // test_tick:4
if ($j == 3) { // 条件表达式,不会执行ticks
echo "aa", PHP_EOL; // test_tick:5 \n test_tick:6,PHP_EOL会计一次ticks
}
}
// declare使用花括号后面所有代码无效果,作用域限定在花括号以内
echo "bbb"; //
echo "ccc"; //
echo "ddd"; //
注释很详细了,我们就不用一一说明了。下面我们来看将ticks定为2,并且declare下面的statemaent不用花括号的结果:
function test_tick1()
{
static $i = 0;
echo 'test_tick1:' . $i++, PHP_EOL;
}
register_tick_function('test_tick1');
$j = 0; // 此处不计时
declare (ticks = 2);
$j++; // test_tick1:0
$j++;
sleep(1); // 停1秒后 test_tick1:1
$j++;
$j++; // test_tick1:2
if ($j == 4) { // 条件表达式,不会执行ticks
// echo "aa", PHP_EOL;
echo "aa"; // test_tick:10,test_tick1不执行,没有跳两步,如果用了,PHP_EOL,那么算两步,会输出test_tick1:3
}
// declare没有使用花括号将对后面所有代码起效果,如果是require或者include将不会对父页面后续内容进行处理
echo "bbb"; // test_tick1:3
echo "ccc";
echo "ddd"; // test_tick1:4
可以看出,我们declare对其定义后续的代码都产生了作用,但需要注意的是如果有页面嵌套,对父页面的后续代码是没有效果的。而定义了ticks=2之后,将在两个低级可计时代码后执行一次register_tick_function()注册的函数代码。
===========
各自媒体平台均可搜索【硬核项目经理】
php不支持定时器么,PHP没有定时器?相关推荐
- c51两个定时器中断冲突_STM32定时器与中断整理
目录 1.系统异常中断 2.外部中断(全部) 3.优先级 5.如何开关中断示例 6.抢断优先级.响应优先级说明 7.定时器说明 7.1基本定时器 7.2高级/通用定时器 7.3定时器拓展补充-主要特性 ...
- DSP之时钟与定时器之四看门狗定时器
1 工作方式 在数字信号处理器的工作过程中有时会发生一些异常情况,这可能是在软件执行时发生错误,如堆栈溢出.内存溢出等软件编写时没有预料到的错误,也可能是DSP在运行时受 ...
- 8、TM4单片机的滴答定时器,及利用定时器精确延时
在我们日常使用单片机的时候,延时一般采用循环的方式,但是这样的方式只能用于粗略的延时,但我们需要精准的时间控制的时候,便需要利用定时器获得精确的延时. 本次采用TM4内的滴答定时器. 文章目录 1.滴 ...
- STM32入门笔记04_TIM定时器+案例:TIM定时器定时中断、定时器外部时钟
TIM定时器 TIM简介 TIM(Timer) 定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器.预分频器.自动重装寄存器的时基单元,在72MHz(系统主频)计数时 ...
- STM32F103的11个定时器详解 高级定时器pwm
STM32F103VC这款单片机一共有2个高级定时器TIM1和TIM8 这2个高级定时器都可以同时产生3路互补带死区时间的PWM信号和一路单独的PWM信号, 具有刹车输入功能,在紧急的情况下这个刹车功 ...
- jmeter定时器的使用_jmeter定时器
jmeter提供了很多元件,帮助我们更好的完成各种场景的性能测试,其中,定时器(timer)是很重要的一个元件,最新的3.0版本jemter提供了9种定时器(之前6种),下面一一介绍: 一.定时器的作 ...
- stm32定时器中断_stm32F4之定时器的基本使用
概述 上一篇说了stm32F4GPIO的使用,这篇说说定时器的使用 一. stm32F407的定时器资源介绍: STM32F407有14个定时器,其中有12个16位的定时器,2个32位的定时器 这 ...
- c++ 定时器_【话说定时器系列】之十:PWM输入模式测量脉宽及占空比实验
STM32定时器是 ST MCU 内部最基础且常用的外设,实际应用尤为普遍.去年,电堂推出了<STM32 TIMER基础及常规应用介绍>,为大家梳理了 STM32 TIMER 的庞大内容, ...
- stm32 定时器_如何计算STM32定时器、独立看门狗和窗口看门狗
点击上方蓝色字体,关注我们 本博文简要阐述STM32L011微控制器定时器的参数配置(其他型号大同小异,本文侧重讲解配置,至于各类定时器的特点后续再述),STM32定时器种类繁多有通用定时器.基本定时 ...
- ARM(I.MX6ULL) EPIT定时器中断实验、定时器按键消抖
参考:Linux之ARM (I.MX6ULL) EPIT定时器详解 作者:一只青木呀 发布时间: 2020-09-20 10:03:37 网址:https://blog.csdn.net/weixin ...
最新文章
- 【经典概念】一文详解Batch Normalization!!!
- 全球及中国塑料薄膜行业产销现状及投资竞争力分析报告2021版
- php实现贴吧功能,PHPCMS V9万能字段增加单选功能,实现多条房产信息调用1个开发商信息等效果...
- 福爆 | 博客升级 .NET Core 3.0 又踩一坑
- php调用airtestide,raw device
- 黑客恶意修改化学成分参数,远程投毒饮用水
- 不会写漂亮代码不是优秀的程序员,没有钢铁侠之躯不是合格的程序员
- SharePoint 2010 中型场(Farm)——性能研究(来自DeLL技术中心博客)
- c语言某字符未定义,学习(单片机C语言程序设计实训100例)遇到问题 未定义的标识符 请教解决办法!...
- 小爱同学指令大全_小爱同学有趣的命令分享给大家
- (八十三)第三方类库不支持64位处理器的解决方法
- 程序人生 - 车辆年检与费用你知道多少?
- 安霸Ambarella_海思Hisilicon_AI芯片参数对比
- HDU 2826 || The troubles of lmy(判断两个N边形是否相似
- 一寸照片多大?你知道一寸照片的尺寸吗?
- .then()方法的意思和用法
- 【R语言】ggplot2---散点图的边框和颜色填充问题
- 舒亦梵:4.24非农周大数据即将来临,黄金行情将是怎样
- java计算机毕业设计黑格伯爵国际英语贵族学校官网MyBatis+系统+LW文档+源码+调试部署
- B. Marvolo Gaunt’s Ring (递推)
热门文章
- Java技术分享:Lambda表达式之接口实例化
- web前端教程之JavaScript的作用域
- 服务器显示器切换_尼某某 DDOS 攻击高德,致使服务器处于黑洞状态 5 个多小时:被判 16 个月...
- 1万条数据大概占多大空间_9月漫画数据月报丨多平台评论数,收藏数较上月大幅下降...
- linux打开dc软件,Linux bc/dc命令的初步使用
- Django框架(15.Django中的自关联)
- 贪心算法讲解(集合覆盖问题,旅行商问题求解)
- python打包成exe 可执行文件 。教程
- 情感分析(支持向量机,逻辑回归)
- HTTP 协议 Host 请求头的作用