【发布时间】:2010-04-19 10:19:17
【问题描述】:
我需要从 php 文件中获取函数列表及其内容(不仅是函数名)。我尝试使用正则表达式,但它有很多限制。它不会解析所有类型的函数。例如,如果函数有 if 和 for 循环语句,它就会失败。
详细说明: 我有大约 100 个包含文件。每个文件都有许多声明的函数。某些文件具有在其他文件中重复的功能。所以我想要的是从特定文件中获取所有函数的列表,然后将此列表放入一个数组中,然后我将使用唯一的数组来删除重复项。我阅读了有关标记器的信息,但我真的不知道如何让它使用其数据获取声明的函数。 我只有这个:
function get_defined_functions_in_file($file)
{
$source = file_get_contents($file);
$tokens = token_get_all($source);
$functions = array();
$nextStringIsFunc = false;
$inClass = false;
$bracesCount = 0;
foreach($tokens as $token) {
switch($token[0]) {
case T_CLASS:
$inClass = true;
break;
case T_FUNCTION:
if(!$inClass) $nextStringIsFunc = true;
break;
case T_STRING:
if($nextStringIsFunc) {
$nextStringIsFunc = false;
$functions[] = $token[1];
}
break;
// Anonymous functions
case '(':
case ';':
$nextStringIsFunc = false;
break;
// Exclude Classes
case '{':
if($inClass) $bracesCount++;
break;
case '}':
if($inClass) {
$bracesCount--;
if($bracesCount === 0) $inClass = false;
}
break;
}
}
return $functions;
}
不幸的是,这个函数只列出了函数名.. 我需要的是列出整个声明的函数及其结构.. 有什么想法吗?
提前谢谢..
【问题讨论】:
-
你想要函数体吗,例如当您找到
function foo() {return 'foo';}时,您希望它返回return 'foo;'。请举例说明预期结果。并提供更多详细信息,说明您首先需要它的原因。 -
我正在编写名为“includer”的脚本。这用于解析包含“include”语句的 php 文件。所以我们读取包含的路径并使用 file_get_contents 获取数据。并将它们放回主文件。我有大约 100 个包含文件。这些文件中的每一个都有一些功能。其中一些功能已在其他文件中重新声明。所以我想要的是从所有这些文件中获取所有函数的列表,其中包含这些函数,然后我需要将它们放在数组中,最后使用 array_unique 删除重复项。如果您有更好的解决方案,请赐教..谢谢,
标签: php list function get declare