概述
在 PHP 5.6 中,似乎添加 declare(ticks=1)
并使用 register_tick_function()
会跟随任何包含并相应地提供分析信息。
然而,在 PHP 7+ 中,现在似乎我必须在每个文件中添加 declare(ticks=1)
。我使用它来分析页面加载中的每个方法调用,不想将其添加到系统中的每个 PHP 文件中(如果它们在库中,则有些文件我无法添加)。
我在文档中找不到有关此更改的任何内容。
复制步骤
创建以下 2 个文件:
index.php
<?php
declare(ticks=1);
$count = 0;
register_tick_function('ticker');
function ticker() {
global $count;
$count++;
}
$foo = 'foo';
$bar = 'bar';
include dirname(__FILE__) . '/inc.php';
echo $count;
inc.php
<?php
#declare(ticks=1);
$baz = "baz";
$qux = "qux";
结果
在终端中运行php index.php
,我得到了以下结果:
- PHP 5.6 - 7
- PHP 7.0 - 5
取消注释inc.php
中的declare(ticks=1)
后,结果为:
- PHP 5.6 - 8
- PHP 7.0 - 8
问题
在PHP 7+中是否有一种强制它遵循includes并以某种方式使其全局的方法?
inc.php
中的任何代码。你可以将inc.php
更改为写入文件。然后再次检查数字。 - Halcyondebug_backtrace()
没有保证的副作用。file_put_contents
有保证的副作用,因此编译器无法将其优化掉。 - Halcyonvar_dump(debug_backtrace())
替换$count
,在文件键中就不会引用inc.php
了 - 但在PHP 5.6中是这样的。 - Peter Featherstone