请注意,调用 declare 的两种方法并不相同。
方法 1
<?php
function do_tick($str = '') {
list($sec, $usec) = explode(' ', microtime());
printf("[%.4f] Tick.%s\n", $sec + $usec, $str);
}
register_tick_function('do_tick');
do_tick('--start--');
declare(ticks=1);
while(1) sleep(1);
?>
方法 2
<?php
function do_tick($str = '') {
list($sec, $usec) = explode(' ', microtime());
printf("[%.4f] Tick.%s\n", $sec + $usec, $str);
}
register_tick_function('do_tick');
do_tick('--start--');
declare(ticks=1) {
while(1) sleep(1);
}
?>
请注意,在 declare 之后使用 {} 时,do_tick 直到我们进入 declare {} 块后约 1 秒才被自动调用。但是,当不使用 {} 时,do_tick 在调用 declare() 后立即被自动调用了两次,而不是一次。
我假设这是由于 PHP 在内部处理 ticking 的方式所致。也就是说,不带 {} 的 declare() 似乎会触发更多低级指令,而这些指令又会在声明过程中触发几次 tick(如果 ticks=1)。