2015-09-18 49 views
1

代码声明结构工作:如何在PHP

declare(ticks=1); 

function tick_handler(){ 
    echo "tick_handler() called\n"; 
} 

register_tick_function('tick_handler'); 
$a = 1; 
if($a < 2){ 
    // $a += 2; 
} 

当我运行此代码,将打印tick_handler() called 4 times.I认为$a = 1将打印tick_handler() called一个时代,但为什么它打印四倍。 如果我改变的第一行代码:

declare(ticks = 2) 

将打印像以前一样的结果。 在PHP文件,它说:

A tick is an event that occurs for every N low-level tickable statements executed by the parser within the declare block 

所以我想如果ticks = 2,它将打印两次,但事实并非如此。 现在,我不知道它是如何工作的。

回答

1

考虑运行这个代码,增加滴答并再次运行,从1到10(或多或少),那么你可能会得到它是如何工作的。

declare(ticks=1); 
function tick_handler(){ 
    echo "tick_handler() called<br>"; 
} 
echo("1<br>"); 
register_tick_function('tick_handler'); 
echo("2<br>"); 
$a = 1; 
echo("3<br>"); 
if($a < 2){ 
    echo("4<br>"); 
    // $a += 2; 
} 
echo("5<br>"); 

我将它解释为:每N“滴答”(其可以是一个深奥的方式PHP具有测量其内的指令来运行的单个高级调用(如印刷))调用此函数。您无法使等价2 tick =>一条指令,1个ticks =>两条指令。

您的代码的“问题”是您在注册滴答处理程序之前设置了滴答编号,然后因为该功能尚未注册而错过了一个呼叫。其实,这个电话是在Tick Tick的注册过程中发出的。如果您在声明后开始计数蜱

function tick_handler(){ 
    echo "tick_handler() called<br>"; 
} 

register_tick_function('tick_handler'); 
declare(ticks=1); //2..3...etc.. 

$a = 1; 
if($a < 2){ 
    // $a += 2; 
} 

然后蜱的不同值的不同结果更一致。