从文件中提取函数名称(带或不带正则表达式)

时间:2011-01-07 03:58:01

标签: php regex function

如何从PHP文件中提取所有函数名称?

该文件有许多功能看起来或多或少如下。正则表达式是最好的方法吗?

public function someFunction(

private function anotherOne(

4 个答案:

答案 0 :(得分:4)

您可以使用正则表达式找到它们:

# The Regular Expression for Function Declarations
$functionFinder = '/function[\s\n]+(\S+)[\s\n]*\(/';
# Init an Array to hold the Function Names
$functionArray = array();
# Load the Content of the PHP File
$fileContents = file_get_contents( 'thefilename.php' );

# Apply the Regular Expression to the PHP File Contents
preg_match_all( $functionFinder , $fileContents , $functionArray );

# If we have a Result, Tidy It Up
if( count( $functionArray )>1 ){
  # Grab Element 1, as it has the Matches
  $functionArray = $functionArray[1];
}

答案 1 :(得分:2)

如果PHP文件在语法上是正确的并且只包含函数,则可以将get_defined_functions的结果存储到数组中(无论如何,返回一个数组)。

include_once PHP文件,将最新的get_defined_functions与之前的数组进行比较(如array_diff)。 array_diff返回的结果是PHP文件中定义的函数。

如果是对象声明,虽然您可以使用函数get_class_method,但上述操作不起作用,但它无法返回受保护和私有方法。

ob_start();
highlight_string(file_get_contents('class.php'));
$html = ob_get_contents();
ob_end_clean();
$dom = new DomDocument;
$dom->loadHTML($html);

您可以拥有一个DOM列表,其中包含可以过滤的样式属性。

答案 2 :(得分:1)

你可以为grep编写另一个PHP文件,或者如果你有Linux或Mac OS X,你可以使用类似的东西:

grep -P "function\s+\w" myfile.php

答案 3 :(得分:1)

如果您的PHP文件包含一个类,如上所述,那么在包含文件之后,您可以使用PHP的get_class_methods函数,它只需要类名,它将返回方法提到的课程。有关详细信息,请参阅get_class_methods

但是,如果您确定类但不知道它的名称,那么您可以使用第一个get_declared_classes函数来获取类,然后您可以将上述函数用于那些方法类。