【发布时间】:2015-01-06 20:05:19
【问题描述】:
我知道 PHP 中的刻度是什么,但是查看以下代码的输出:
<?php
function myfunc() {
static $n = 1;
print "$n) Tick<br>";
$n++;
}
register_tick_function("myfunc");
declare(ticks=1);
echo 'echo<br>';
输出是:
1) Tick
2) Tick
echo
3) Tick
它告诉我注册的tick函数'myfunc'被执行了3次。但是,基于这个答案 -> PHP using Declare ? What is a tick?:
每行都有一个勾号;以及每个区块{}
不应该是:
1) Tick
echo
2) Tick
?因为只有两个语句:
declare(ticks=1);<-- Statement 1
echo 'echo<br>';<-- Statement 2
为什么是 3???如果我删除“;”来自declare,像这样:
declare(ticks=1)
echo 'echo<br>';
我得到了注册tick函数的唯一一次执行:
echo
1) Tick
那么,为了了解已注册的刻度函数执行了多少次,计算可刻度语句的绝对规则是什么? (我之所以问这个问题是因为这个例子,而且 PHP 手册实际上并没有涵盖关于计算可勾选统计信息的主题)
编辑:我认为另一个奇怪的行为是:
<?php
function myfunc()
{
static $n = 1;
print "$n) Tick<br>";
$n++;
}
register_tick_function("myfunc");
declare(ticks = 1)
echo 'Start<br>';
echo 'echo<br>';
哪个输出:
Start
1) Tick
echo
tick 函数执行一次,但语句至少有 2 条(如果不计算 @Marc B 指出的“脚本结束”)
【问题讨论】:
-
还有“脚本结束”的隐含标记,有点像
}。 -
好吧,这应该是有道理的,但是为什么如果我有
declare(ticks=1) echo 'echo<br>';我只执行一次刻度处理函数(对于echo语句)而不是“脚本结束” “? -
我猜
declare echo;是一个单独的语句,因为没有;,所以直到语句完成之后(执行回显之后)才开始启用刻度,所以你得到的单个滴答声是脚本的结尾,而不是回声中的滴答声。 -
即使这样也有道理,但是如果你说
declare不被算作,在第一个执行 3 次滴答乐趣的脚本中(一个用于声明、回显和“结束脚本”)它应该只执行 2 (不用于声明)...