Overview
在 PHP 5.6 中似乎添加declare(ticks=1)
然后使用register_tick_function()
将遵循任何包含并相应地提供分析信息。
在 PHP 7+ 中,但现在看来我必须添加declare(ticks=1)
在每个文件中。我用它来分析页面加载时的每个方法调用,现在不想将其添加到我系统中的每个 PHP 文件中(有些文件如果在库中,我就不能添加)。
我在文档中找不到任何有关对此所做更改的内容。
复制步骤
创建以下2个文件:
索引.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";
Results
Running php index.php
在终端给我:
With declare(ticks=1)
中未注释inc.php
结果是:
Question
有什么方法可以强制它遵循包含并在某种意义上使其在 PHP 7+ 中全局化吗?
根据提交的 PHP 错误https://bugs.php.net/bug.php?id=71448 https://bugs.php.net/bug.php?id=71448
由于实现错误,declare(ticks=1) 指令泄漏到 PHP 7.0 之前的不同编译单元中。这不是针对每个文件或每个范围的 declare() 指令的工作方式。
所以事实上这是一个错误,它曾经像 PHP 5.6 中那样工作,并且在 PHP 7.0 中添加了正确的实现。不幸的是,这意味着它永远不会起作用,但至少有一个解释。
以下问题的答案显示了如何在 PHP 7+ 中实现此目的
在 PHP7 中本机分析多个脚本 https://stackoverflow.com/questions/44473694/natively-profile-multiple-scripts-in-php7
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)