php中declare示例

代码如下:

echo "<pre>";
//可以用于程序代码测试,下面的程序实现了超时退出的功能
$start_time = time();
$singal = false;              //使用全局变量跳出死循环
function check_timeout(){
    global $start_time;
    global $singal;
    $timeout = 5;
    if(time()-$start_time>$timeout){
        $singal = true;
    }
}
register_tick_function('check_timeout');
declare(ticks = 5){
    $num = 0;
    while (1) {
        $a = 0;
        $num = ++$num;
        if($singal == true){
            //break;
            goto signal;           //使用goto跳转到指定的位置,也可以使用break中断循环跳出
        }
    }
}
signal:;


//测试declare执行的代码块,作用范围
$tmp = 0;
function timer() {
    global $tmp;
    echo $tmp.'<br>';
}
//注册tick方法
register_tick_function("timer");
//设定每执行几条语句执行已注册的方法这里设置了3/每次
declare(ticks=2){
    echo "<pre>";
    $tmp += 1;
    $tmp += 1;
    $tmp += 1;
    $tmp += 1;
    $tmp += 1;
    $tmp += 1;
    $tmp += 1;
    $tmp += 1;
    $tmp += 1;
    $tmp += 1;
}



//测试ticks是否能使用常量,经过测试ticks的值必须是一个数字
echo "<pre>";
define('LINES',2);
$i = 0;
function test(){
    global  $i;
    echo "<br>exec lines:".(LINES * $i);
    $i++;
}
register_tick_function('test');
declare(ticks=2){
    function getInfo(){
        $sum = 0;
        for($j = 0; $j<100;$j++){
            $sum = $sum + $j;
        }
        return $sum;
    }
    echo "<br>".getInfo();
}

运行结果:

0
2
4
6
8
10
10

exec lines:010

exec lines:210

exec lines:410

exec lines:610

exec lines:810

exec lines:1010

exec lines:1210

exec lines:1410

exec lines:1610

exec lines:1810

exec lines:2010

exec lines:2210

exec lines:2410

exec lines:2610

exec lines:2810

exec lines:3010

exec lines:3210

exec lines:3410

exec lines:3610

exec lines:3810

exec lines:4010

exec lines:4210

exec lines:4410

exec lines:4610

exec lines:4810

exec lines:5010

exec lines:5210

exec lines:5410

exec lines:5610

exec lines:5810

exec lines:6010

exec lines:6210

exec lines:6410

exec lines:6610

exec lines:6810

exec lines:7010

exec lines:7210

exec lines:7410

exec lines:7610

exec lines:7810

exec lines:8010

exec lines:8210

exec lines:8410

exec lines:8610

exec lines:8810

exec lines:9010

exec lines:9210

exec lines:9410

exec lines:9610

exec lines:9810

exec lines:100
495010

exec lines:102
综上:decalare(ticks=num)这里num是执行多少行代码,num必须是整形数字。在执行到num的倍数行时回去调用
register_tick_function注册的函数逻辑

猜你喜欢

转载自blog.csdn.net/d_x_p_m_12/article/details/80931099