如何在php

时间:2015-09-18 10:57:44

标签: php declare

代码:

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四次。我认为$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 个答案:

答案 0 :(得分: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 =&gt;一个指令,1个刻度=&gt;两条指示。

您的代码的“问题”是您在注册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;
}

然后,不同的滴答值结果更加一致。