查找文件中的所有PHP函数

时间:2015-08-04 16:00:14

标签: javascript php

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

preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData);

问题在于,如果有Javascript函数,它们也会进入该方案。

甚至可以只获得PHP函数。 一个指标是<script> - 标签,但我不知道如何只跟踪script - 标签没有包含的功能!

谢谢!

2 个答案:

答案 0 :(得分:2)

一种选择是在处理之前删除所有<script>...</script>标签,但这假设您仅在文件中的这些标签中仅包含JavaScript。如果您具有为您生成HTML的函数或库,则可以在不显式在PHP文档中包含<script>...</script>标记的情况下输出JavaScript代码。问题是您正在使用模式匹配,这可能导致一系列误报。

要一起消除所有这些误报,可以使用PHP ReflectionFunction class来确定PHP中定义了哪些函数,哪些没有。一旦有了可能的函数名称数组,请使用以下命令:

$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函数名称的列表。

答案 1 :(得分:1)

在写完问题后2秒我有 THE 的想法。

$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> - 标签! 如果您以后需要它们,您也可以保存它们(而不是替换它们)并稍后添加它们!

如果其他人会遇到同样的问题!