You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取PHP源码中的函数/方法及其在项目中的使用情况

PHP函数/方法提取与调用情况扫描方案

PHP原生ReflectionClass、ReflectionMethod等反射工具仅能获取函数、方法的定义元信息,不具备代码扫描、调用关系统计能力,要实现单文件/全目录扫描,同时拿到函数/方法定义和实际使用数据,可使用以下可运行在PHP/Linux环境的工具:

  • PHP-Parser
    PHP生态通用的静态语法解析库,可将PHP源码解析为AST抽象语法树,通过自定义节点遍历逻辑,既能提取所有函数、类方法的定义信息(包含命名空间、所属类、起止行、参数等完整信息),也能识别所有普通函数调用、类方法调用节点,匹配对应定义后即可统计出每个函数/方法的所有调用位置、调用上下文,准确率远高于正则匹配方案。
    核心实现示例:
    $parser = (new ParserFactory())->createForHostVersion();
    $traverser = new NodeTraverser();
    // 自定义节点访问器收集定义和调用数据
    $traverser->addVisitor(new class extends NodeVisitorAbstract {
        public function leaveNode(Node $node) {
            // 收集普通函数定义
            if ($node instanceof Node\Stmt\Function_) {
                // 记录函数名、所属文件、起始行等信息
            }
            // 收集类方法定义
            if ($node instanceof Node\Stmt\ClassMethod) {
                // 记录方法名、所属类、所属文件、起始行等信息
            }
            // 收集普通函数调用
            if ($node instanceof Node\Expr\FuncCall) {
                // 记录调用位置、被调用函数名
            }
            // 收集类方法调用
            if ($node instanceof Node\Expr\MethodCall) {
                // 记录调用位置、被调用方法名、所属类
            }
        }
    });
    // 遍历目标目录下所有PHP文件,传入解析器遍历即可拿到全量数据
    
  • phpCallGraph
    可直接在Linux命令行运行的PHP调用关系分析工具,无需自行编写AST遍历逻辑,支持指定单文件或整个项目目录作为扫描目标,自动解析所有函数、方法定义,同时生成完整的调用关系清单,可直接导出每个函数/方法的被调用位置、调用层级数据。
    基础使用命令:
    # 扫描src目录下所有PHP文件,输出调用统计报告
    phpcallgraph --directory ./src --output ./call-stat.txt
    
  • PHP静态分析工具(Phan/PHPStan)自定义插件
    Phan、PHPStan是目前主流的PHP静态分析工具,内置了成熟的语法解析、调用匹配逻辑,能正确处理命名空间、方法重写、继承等复杂场景,识别准确率高于简单的自定义扫描脚本。可以通过编写自定义规则插件,直接复用工具内置的解析结果,拿到全项目的函数/方法清单以及对应的所有调用点位数据。

注意:如果项目中存在$obj->$method()这类动态方法调用、call_user_func/call_user_func_array动态传参调用的场景,所有静态扫描工具都无法实现100%识别,这类场景需要配合运行时埋点日志才能拿到完整的调用数据。

你之前使用反射的示例仅能获取定义侧信息,无法覆盖调用扫描场景,反射本身设计上就不支持遍历代码内的调用逻辑,需要搭配上述静态解析工具实现需求。

内容的提问来源于stack exchange,提问作者Shadman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:09:18