php declare (ticks = N)
A tick is an event that occurs for every N low-level tickable statements executed by the parser within the declare block. The value for N is specified using ticks=N
within the declare block's directive section.
这是PHP中对 declare 中的 ticks 的定义
中文翻译 Tick(时钟周期)是一个在 declare 代码段中解释器每执行 N 条可计时的低级语句就会发生的事件。N 的值是在 declare 中的 directive 部分用ticks=N
来指定的.
我个人理解的大意就是说, tick 这个周期上会绑定一个事件, 这个事件, 当Zend引擎执行到所设置的 tick (就是N) 行低级语句时, 就执行 register_tick_function() 定义的事件
关于什么是低级语句, http://my.oschina.net/Jacker/blog/32936 这篇文章说的很详细, 有时间的话, 可以研究一下的, 涉及到了PHP的底层 zend 引擎.
declare (ticks = N);
这个东西有什么用?
1. 可以用来调试语句, 根据粗体标明的, 不难看出来, 可以用来调试语句, 可以把执行出错的每一行代码记录下来, 可以看出到底是哪里出错了.
<?php
error_reporting(0); declare(ticks = 1); // $result bool
function debug () {
$debug = debug_backtrace();
if ($debug) {
$functionName = $debug['function'];
if ( !function_exists($functionName) ) {
// file_put_contents('/tmp/declare-debug', 'function is not exists!' . "\n", FILE_APPEND);
exit("function is not exists!\n");
}
}
} register_tick_function('debug'); atest('bb');
2. 可以控制程序执行时间, walkor 大神写过, 拿来用一下. 下面是两个死循环, 但是如下这样写, 程序运行时间不会超过5s .
<?php
declare(ticks = 1); $timeStart = time(); function checkTimeout () {
global $timeStart;
$timeoutSeconds = 5; if (time() - $timeStart > $timeoutSeconds) {
exit ('超时' . "\n");
}
} register_tick_function('checkTimeout'); while (1) {
$num = 1;
} while (1) {
$num = 1;
}
3. walkor大神 所写的第二个是检测信号的, 拿来用一下.
declare(ticks=1);每执行一次低级语句会检查一次该进程是否有未处理过的信号,测试代码如下:
运行 php signal.php
然后CTL+c 或者 kill -SIGINT PID 会导致运行代码跳出死循环去运行pcntl_signal注册的函数,效果就是脚本exit打印“Get signal SIGINT and exi”退出
declare(ticks=1);
pcntl_signal(SIGINT, function(){
exit("Get signal SIGINT and exit\n");
});
echo "Ctl + c or run cmd : kill -SIGINT " . posix_getpid(). "\n" ;
while(1){
$num = 1;
}
php declare (ticks = N)的更多相关文章
- PHP declare(ticks=N); 的作用
一般用法是 declare(ticks=N);拿declare(ticks=1)来说,这句主要作用有两种: 1.Zend引擎每执行1条低级语句就去执行一次 register_tick_function ...
- PHP进程之信号捕捉中的declare(ticks=1)
转自:http://blog.csdn.net/gavin_new/article/details/65629223 一. 语句在php中的意义 php中,declare(ticks=n)和regis ...
- 使用SQL生成DateTime.Ticks
在项目中我需要使用到一个随机数(Random Number),该随机数将作为 Hashtable 中的 Key 用于唯一索引数据,所以需要保持单机唯一性. 同时该随机数还需要具备可排序性以便对数据进行 ...
- php里的declare用法
function tick_handler () { echo "tick_handler() called<br>" ; } function tick_handle ...
- php ticks 调试应用
declare(ticks=1); register_tick_function('do_profile'); register_shutdown_function('show_profile'); ...
- 走入PHP-declare、ticks、encoding、include
declare 结构用来设定一段代码的执行指令.declare 的语法和其它流程控制结构相似(该代码为语法格式,不是代码案例,无需敲打该代码): declare (directive) stateme ...
- php中的declare
<?php // 事件的回调函数 function func_tick() { echo "call...\r\n"; } // 注册事件的回调函数 register_tic ...
- PHP - declare tick
今天看php手册,结构流程控制语句,翻到个没见过的关键字declare(申明的意思).于是稍稍看了下. 大概意思是:定义一段代码.关于他合适执行,怎么执行完全依照他的参数. 反正不知道什么意思.先来一 ...
- 【php学习笔记】ticks篇
1. 什么是ticks 我们来看一下手冊上面对ticks的解释: A tick is an event that occurs for every N low-level statements exe ...
随机推荐
- Article及ArticleList模板
HTML5滑动条: <input type="range" min="0" max="100" value="55" ...
- Java认证:JavaRunnable线程编写接口代码
Java认证:JavaRunnable线程编写接口代码.JavaRunnable线程如何才能更好的适应目前的编程环境呢?下面我们就看看如何才能更好的进行相关环境.希望下面的文章对大家有所帮助.Java ...
- 认识Web和HTTP
一:了解Web. 首先,Web应用的产生起源于1989年,当时CERN(欧洲核子研究组织)的蒂姆·伯纳斯-李(Time BernersLee)博士提出了一种能让远隔两地的研究者们共享知识的设想.借 ...
- 去除VS2010中中文注释下的红色波浪线
1,中文注释以分号结尾 2,Assist X 菜单栏->Assist X Option->Underline 选择“min”.
- HDU 1069 Monkey and Banana(LIS最长上升子序列)
B - LIS Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descripti ...
- optimize performance
http://www.cnblogs.com/fullhouse/archive/2012/01/05/2313105.html http://www.cnblogs.com/fullhouse/ar ...
- Unity3d 读取网络xml
Unity3d 读取网络xml Unity3d 读取网络xml,这个xml文件需要不包含BOM信息,可以用UltraEdit打开xml文件,并且另存为的时候,选择不包含BOM的utf-8格式存储!
- Multiple
poj1465:http://poj.org/problem?id=1465 题意:给你一个数n(0~4999):以及m个不同十进制的数,问有这些十进制数组成的最小的n的倍数是多少.如果有则输出,没有 ...
- Linux Shell脚本Ldd命令原理及使用方法
1.首先ldd不是一个可执行程序,而只是一个shell脚本2.ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量如下:LD_TRACE_LOADED_OBJECTS.LD ...
- 揭开Linux操作系统的Swap交换区之谜
揭开Linux操作系统的Swap交换区之谜 Swap,即交换区,除了安装Linux的时候,有多少人关心过它呢?其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要.通过调整Swap ...