首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找文件中的所有PHP函数

查找文件中的所有PHP函数
EN

Stack Overflow用户
提问于 2015-08-04 16:00:14
回答 2查看 493关注 0票数 0

我想在一个文件中找到所有函数--这没问题:

代码语言:javascript
运行
复制
preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData);

问题是,如果有Javascript函数,他们也会加入这个方案。

它甚至可能只获得PHP-函数。其中一个指标是<script>-Tag,但我不知道如何只跟踪函数,这些函数不会被script-Tag所超越!

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-04 16:09:37

写完这个问题后,我有了的想法。

代码语言:javascript
运行
复制
$data = file_get_contents($file);   

$data = preg_replace("/<script[^>]*>[\s\S]*?<\/script>/", "", $data);
preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData);

只需删除所有的<script>-Tags!如果以后需要它们,也可以保存它们(而不是替换它们),然后再添加它们!

如果其他人也会有同样的问题!

票数 3
EN

Stack Overflow用户

发布于 2019-08-22 19:46:05

一种选择是在处理之前删除所有的<script>...</script>标记,但这假设您将只在这些标记中直接在文件中使用JavaScript。如果您有一个为您生成HTML的函数或库,则可以输出JavaScript代码,而不必显式地将<script>...</script>标记放在PHP文档中。问题是,您正在使用模式匹配,这可能会导致一系列错误阳性。

要一起删除这些假阳性,可以使用PHP ReflectionFunction类来确定哪些函数是在PHP中定义的,哪些不是定义的。一旦您有了一个可能的函数名数组,请使用以下内容:

代码语言:javascript
运行
复制
$data = file_get_contents($file);   
$outputData;
$validMatches=array();
preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData);

foreach($outputData[1] as $match) {
    $isValid=true;
    try {
        $reflection = new \ReflectionFunction($match);
    } catch (\ReflectionException $e) {
        $isValid=false;
    }
    if($isValid == true) {
        $validMatches[]=$match;
    }
}

这是更详细的,但它将保证您将得到一个只包含PHP函数名的列表。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31814018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档