php的ticks
2016-07-11 16:31
706 查看
先看看手册是怎么说的:
declare 结构用来设定一段代码的执行指令。declare 的语法和其它流程控制结构相似:
1 declare (directive)
2 statement
directive 部分允许设定 declare 代码段的行为。目前只认识两个指令:ticks(更多信息见下面 ticks 指令)以及 encoding(更多信息见下面 encoding指令)。
Note:
ticks 指令在 PHP 5.3.0 中是过时指令,将会从 PHP 6.0.0 移除。
encoding 是 PHP 5.3.0 新增指令。
Tick 是一个在 declare 代码段中解释器每执行 N 条低级语句就会发生的事件。N 的值是在 declare 中的 directive 部分用 ticks=N 来指定的。
在每个 tick 中出现的事件是由 register_tick_function() 来指定的。更多细节见下面的例子。注意每个 tick 中可以出现多个事件。
看完手册还是觉得云里雾里,再看看别人是怎么描述:
根据代码解析:
01 <?php
02 function doTicks ()
03 {
04 echo 'Ticks';
05 }
06 register_tick_function('doTicks');
07 declare(ticks = 1) {
08 for ($x = 1; $x < 10; ++ $x) {
09 echo $x * $x . '<br />';
10 }
11 }
12 ?>
运算结果:
01 1
02 TicksTicks4
03 TicksTicks9
04 TicksTicks16
05 TicksTicks25
06 TicksTicks36
07 TicksTicks49
08 TicksTicks64
09 TicksTicks81
10 TicksTicksTicksTicks
产生三个疑问:
(1)为什么先输出1之后才输出“Ticks”?
(2)为什么在输出81后还输出四个Ticks ?
(3)declare中的for循环怎么分解成低级语句(low-level)?
这是每个初次接触ticks的人都会碰到的问题。首先register_tick_function函数定义了每个tick事件发生时的处理函数。那么什么是tick事件呢?先看手册上对ticks的解释:
1 A tick is an event that occurs for every N low-level statements executed by the parser within the declare block. The value for N is specified using ticks=N within the declare blocks's directive section.
2 The event(s) that occur on each tick are specified using the register_tick_function().
这个解释有三层意思:
(1) tick是一个事件。
(2) tick事件在PHP每执行N条低级语句就发生一次,N由declare语句指定。
(3)可以用register_tick_function()来指定tick事件发生时应该执行的操作。
我们知道,statement包括:
(1) 简单语句:空语句(就一个;号),return,break,continue,throw, goto,global,static,unset,echo, 内置的HTML文本,分号结束的表达式等均算一个语句。
(2) 复合语句:完整的if/elseif,while,do...while,for,foreach,switch,try...catch等算一个语句。
(3) 语句块:{} 括出来的语句块。
(4) 最后特别的:declare块本身也算一个语句(按道理declare块也算是复合语句,但此处特意将其独立出来)。
所有的statement, function_declare_statement, class_declare_statement就构成了所谓的低级语句(low-level statement)。
现在再来看开始的例子就比较好理解了:
首先完整的for循环算一个语句,但必须要等循环结束才算,因此在编译时for循环里面的echo 算第一个语句。
所以第一个doTicks是在第一个echo后执行的,也就是1输出后才发生第一个tick事件。
在$x 从1到9的循环中,每个循环包括两个语句,一个echo, 一个for循环。在81输出后,因为echo是一条语句,因此输出第一个ticks。
同时$x=9的这个for循环也结束了,这又是一条语句,输出第二个ticks;开始$x=10的循环,但这时已不满足循环条件,for循环执行结束,这个循环又是一个语句,这时输出第三个ticks。
最后declare本身也算一条语句,所以又输出第四个ticks。
说了半天,ticks到底有什么用?实际上可用tick来进行调试,性能测试,实现简单的多任务,或者做一些后台的I/O操作等等。
更多例子可以查看手册或者官方网站http://www.php.net/manual/en/control-structures.declare.php
declare 结构用来设定一段代码的执行指令。declare 的语法和其它流程控制结构相似:
1 declare (directive)
2 statement
directive 部分允许设定 declare 代码段的行为。目前只认识两个指令:ticks(更多信息见下面 ticks 指令)以及 encoding(更多信息见下面 encoding指令)。
Note:
ticks 指令在 PHP 5.3.0 中是过时指令,将会从 PHP 6.0.0 移除。
encoding 是 PHP 5.3.0 新增指令。
Tick 是一个在 declare 代码段中解释器每执行 N 条低级语句就会发生的事件。N 的值是在 declare 中的 directive 部分用 ticks=N 来指定的。
在每个 tick 中出现的事件是由 register_tick_function() 来指定的。更多细节见下面的例子。注意每个 tick 中可以出现多个事件。
看完手册还是觉得云里雾里,再看看别人是怎么描述:
根据代码解析:
01 <?php
02 function doTicks ()
03 {
04 echo 'Ticks';
05 }
06 register_tick_function('doTicks');
07 declare(ticks = 1) {
08 for ($x = 1; $x < 10; ++ $x) {
09 echo $x * $x . '<br />';
10 }
11 }
12 ?>
运算结果:
01 1
02 TicksTicks4
03 TicksTicks9
04 TicksTicks16
05 TicksTicks25
06 TicksTicks36
07 TicksTicks49
08 TicksTicks64
09 TicksTicks81
10 TicksTicksTicksTicks
产生三个疑问:
(1)为什么先输出1之后才输出“Ticks”?
(2)为什么在输出81后还输出四个Ticks ?
(3)declare中的for循环怎么分解成低级语句(low-level)?
这是每个初次接触ticks的人都会碰到的问题。首先register_tick_function函数定义了每个tick事件发生时的处理函数。那么什么是tick事件呢?先看手册上对ticks的解释:
1 A tick is an event that occurs for every N low-level statements executed by the parser within the declare block. The value for N is specified using ticks=N within the declare blocks's directive section.
2 The event(s) that occur on each tick are specified using the register_tick_function().
这个解释有三层意思:
(1) tick是一个事件。
(2) tick事件在PHP每执行N条低级语句就发生一次,N由declare语句指定。
(3)可以用register_tick_function()来指定tick事件发生时应该执行的操作。
我们知道,statement包括:
(1) 简单语句:空语句(就一个;号),return,break,continue,throw, goto,global,static,unset,echo, 内置的HTML文本,分号结束的表达式等均算一个语句。
(2) 复合语句:完整的if/elseif,while,do...while,for,foreach,switch,try...catch等算一个语句。
(3) 语句块:{} 括出来的语句块。
(4) 最后特别的:declare块本身也算一个语句(按道理declare块也算是复合语句,但此处特意将其独立出来)。
所有的statement, function_declare_statement, class_declare_statement就构成了所谓的低级语句(low-level statement)。
现在再来看开始的例子就比较好理解了:
首先完整的for循环算一个语句,但必须要等循环结束才算,因此在编译时for循环里面的echo 算第一个语句。
所以第一个doTicks是在第一个echo后执行的,也就是1输出后才发生第一个tick事件。
在$x 从1到9的循环中,每个循环包括两个语句,一个echo, 一个for循环。在81输出后,因为echo是一条语句,因此输出第一个ticks。
同时$x=9的这个for循环也结束了,这又是一条语句,输出第二个ticks;开始$x=10的循环,但这时已不满足循环条件,for循环执行结束,这个循环又是一个语句,这时输出第三个ticks。
最后declare本身也算一条语句,所以又输出第四个ticks。
说了半天,ticks到底有什么用?实际上可用tick来进行调试,性能测试,实现简单的多任务,或者做一些后台的I/O操作等等。
更多例子可以查看手册或者官方网站http://www.php.net/manual/en/control-structures.declare.php
相关文章推荐
- PHP自定义函数获取搜索引擎来源关键字的方法
- PHP的htmlspecialchars、strip_tags、addslashes解释
- iis搭建FTP服务器
- 整数反转算法(php实现)
- php处理带有中文URL的方法
- PHP实现JS中escape与unescape的方法
- PHP SPL标准库之SplFixedArray简介
- PHP 运行方式(PHP SAPI介绍)
- php中__get()和__set的用法
- php处理复杂xml数据示例
- PHP九九乘法表
- PHP post get
- php的debug相关函数用法示例
- FileOutputStream
- PHP的realpath cache
- php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
- php:similar_text()函数的相关解析
- 使用Smarty模板2.x注入变量报错
- 完全PHP5笔记之(COOKIE与SESSION篇)
- Yii中配置单点登录 即多个子站同步登录。