我知道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
它告诉我注册的滴答功能&#39; myfunc&#39;执行3次。但是,基于这个答案 - &gt; PHP using Declare ? What is a tick?:
每行都有一个勾号;和每个块{}
不应该是:
1) Tick
echo
2) Tick
?因为只有两个语句:
declare(ticks=1);<-- Statement 1
echo 'echo<br>';<-- Statement 2
为什么3 ???如果我删除&#34 ;;&#34;来自declare
,像这样:
declare(ticks=1)
echo 'echo<br>';
我只获得了一个注册的tick功能:
echo
1) Tick
那么,为了理解注册的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(如果不计算&#34;脚本结束&#34;正如@Marc B指出的那样)
答案 0 :(得分:1)
function myfunc()
{
static $n = 1;
print "$n) Tick<br>";
$n++;
}
register_tick_function("myfunc");
declare(ticks = 1) {
//echo 'Start<br>';
echo 'echo<br>';
}
输出2个滴答,一个用于块{},一个用于回声。 如果你取消评论&#39;开始&#39; 这将带来你预期的1个滴答。
所以我认为最佳做法是始终使用
declare(ticks=1) { }
带方括号
答案 1 :(得分:0)
您没有在declare
之后添加分号,因此您的declare
语句仅适用于下一个语句(仅适用于echo
)。这与在declare
之后使用大括号中的块一样是相同的行为 - 然后该块被视为要执行的唯一语句。控件结构与while(true)x();
和while(true){x();y();}
相同,只是在declare
分号的情况下,它会在所有剩余脚本周围创建一个隐式块。