php项目统计马赛回旋使用频率如何?

wen PHP项目 1

本文目录导读:

php项目统计马赛回旋使用频率如何?

  1. 统计某个PHP函数/方法的调用频率
  2. 统计某段“代码模式”的出现频率
  3. 统计 Git 层面的“使用频率”
  4. 如果“马赛回旋”是某个业务动作
  5. 给你的具体建议

这个问题挺有意思的,我理解你可能是想问:在一个PHP项目里,如何统计某个特定功能/函数/代码片段(你戏称为“马赛回旋”)的使用频率?

“马赛回旋”是足球术语(齐达内的招牌过人动作),放到代码语境里,通常指某种花哨但实用的技巧性写法

  • 某个巧妙的递归/闭包/魔术方法
  • 一段绕来绕去但能跑通的“祖传代码”
  • 某个被到处复制的工具函数

下面按“你到底想统计什么”分几种情况说。


统计某个PHP函数/方法的调用频率

静态分析(不运行代码)

用工具扫描代码库,找出某个函数被调用了多少次。

推荐工具:

  • PHPStan / Psalm:自定义规则可以统计
  • PhpParser (nikic/php-parser):自己写脚本遍历AST

示例:统计 str_replace 在整个项目中出现次数

use PhpParser\ParserFactory;
use PhpParser\NodeTraverser;
use PhpParser\NodeVisitorAbstract;
use PhpParser\Node;
$parser = (new ParserFactory)->createForNewestSupportedVersion();
$traverser = new NodeTraverser();
$count = 0;
$traverser->addVisitor(new class($count) extends NodeVisitorAbstract {
    public function __construct(public int &$count) {}
    public function enterNode(Node $node) {
        if ($node instanceof Node\Expr\FuncCall
            && $node->name instanceof Node\Name
            && $node->name->toString() === 'str_replace') {
            $this->count++;
        }
    }
});
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator('src')) as $file) {
    if ($file->getExtension() !== 'php') continue;
    $ast = $parser->parse(file_get_contents($file));
    $traverser->traverse($ast);
}
echo "str_replace 被调用 $count 次\n";

运行时统计(真实调用频率)

如果想知道“运行时到底被调用了多少次”:

  • Xdebug + 代码覆盖率xdebug_start_code_coverage() 能看到每行执行次数
  • XHProf / Tideways:函数级调用次数统计
  • OpenTelemetry / SkyWalking PHP:APM方案,能看到函数级指标

Xdebug 示例:

xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);
// ... 跑你的业务
$data = xdebug_get_code_coverage();
// $data[文件名][行号] = 执行次数

日志埋点(最简单粗暴)

在“马赛回旋”函数入口加一行:

function 马赛回旋(...$args) {
    static $count = 0;
    $count++;
    error_log("马赛回旋 called {$count} times");
    // ...
}

或者用 Redis 原子自增:

Redis::incr('stats:马赛回旋');

统计某段“代码模式”的出现频率

比如你想找项目里有多少处写了这种“回旋”式写法:

$a = $b ?: ($c ?: ($d ?: 'default'));

思路:

  1. 正则匹配(粗糙但快)
  2. AST 匹配(精确)
  3. Rector 写自定义规则统计

正则示例:

grep -rP '\?:.*\?:.*\?:' src/ | wc -l

统计 Git 层面的“使用频率”

想知道这段代码是谁、什么时候、改了多频繁

# 某函数/关键字在提交历史中的出现频率
git log -S "马赛回旋" --oneline | wc -l
# 某文件的修改频率
git log --follow --format="%ad" --date=short src/马赛回旋.php | sort | uniq -c

配合 git-of-theseuscode-maat 可以做可视化。


马赛回旋”是某个业务动作

比如电商里用户“加购→删掉→再加购”这种回旋操作,

  • 在业务事件里打点(埋点SDK / 消息队列)
  • 用 ClickHouse / Doris 做行为分析
  • 定义窗口函数统计“N分钟内反复操作”

SQL思路:

SELECT user_id, COUNT(*) AS 回旋次数
FROM user_events
WHERE event = 'add_to_cart'
  AND ts > NOW() - INTERVAL 1 HOUR
GROUP BY user_id
HAVING COUNT(*) >= 3;

给你的具体建议

你说的“马赛回旋”到底指什么?如果是:

场景 推荐方案
某个PHP函数被调用多少次 PhpParser静态扫描 + Xdebug动态统计
某段代码模式出现多少处 Rector 自定义规则 / AST遍历
运行时真实热点 XHProf / Tideways / OpenTelemetry
代码随时间演变 git log -S / code-maat
业务行为频率 埋点 + OLAP 查询

如果你能说一下“马赛回旋”具体指哪段代码或哪种模式,我可以给你写一个能直接跑的统计脚本

抱歉,评论功能暂时关闭!