請注意,兩種呼叫 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 內部處理 tick 的方式所致。也就是說,沒有 {} 的 declare() 似乎會觸發更多低階指令,而這些指令在宣告的過程中會觸發 tick 幾次(如果 ticks=1)。