概述
在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
会给我:
在declare(ticks=1)
中取消注释inc.php
,结果为:
问题
有没有办法强制它遵循包含并在某种意义上使它在PHP 7 +中全局化?
答案 0 :(得分:2)
根据https://bugs.php.net/bug.php?id=71448提交的PHP错误
由于实现错误,declare(ticks = 1)指令泄漏到PHP 7.0之前的不同编译单元中。这不是每个文件或每个范围的declare()指令应该如何工作。
所以实际上它是一个错误,它曾经像在PHP 5.6中那样工作,并且在PHP 7.0中添加了正确的实现。不幸的是,这意味着它永远不会起作用,但至少有一个解释。
以下问题的答案显示了如何在PHP 7 +
中实现这一目标