我想在文件中找到所有函数 - 这没问题:
preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData);
问题在于,如果有Javascript函数,它们也会进入该方案。
甚至可以只获得PHP函数。
一个指标是<script>
- 标签,但我不知道如何只跟踪script
- 标签没有包含的功能!
谢谢!
答案 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>
- 标签!
如果您以后需要它们,您也可以保存它们(而不是替换它们)并稍后添加它们!
如果其他人会遇到同样的问题!