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

Php 从文件中提取函数名(带或不带正则表达式),php,regex,function,Php,Regex,Function,如何从PHP文件中提取所有函数名 该文件有许多函数,大致如下所示。正则表达式是最好的方法吗 public function someFunction( private function anotherOne( 如果PHP文件语法正确且仅包含函数,则可以将get_defined_functions的结果存储到数组中(无论如何,返回一个数组) include_oncePHP文件,将最新的get_defined_函数与以前的数组(如array_diff)进行比较。array_diff返回的结果都是

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

该文件有许多函数,大致如下所示。正则表达式是最好的方法吗

public function someFunction(

private function anotherOne(

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

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

如果是对象声明,则上述操作将不起作用,尽管您可以使用函数
get\u class\u method
,但它不能返回受保护的和私有的方法

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

您可以拥有一个带有样式属性的列表,您可以使用该属性进行筛选。

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

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

如果是对象声明,则上述操作将不起作用,尽管您可以使用函数
get\u class\u method
,但它不能返回受保护的和私有的方法

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

您可以拥有一个带有样式属性的列表,您可以使用该属性进行筛选。

您可以为此将另一个PHP文件写入grep,或者如果您有Linux或MacOSX,您可以使用以下内容:

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

为此,您可以将另一个PHP文件写入grep,或者如果您有Linux或MacOSX,您可以使用以下内容:

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

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

# 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];
}

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

# 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];
}
如果您的文件包含一个类,该类具有您提到的上述方法,则在包含该文件后,您可以使用PHP的
get_class_methods
函数,该函数只需要类名,它将返回所述类的方法。有关详细信息,请参阅

但是,如果您确定类,但不知道类的名称,则可以使用第一个函数获取类,然后可以使用上述函数获取这些类的方法。

如果您的文件包含一个类,该类在包含文件后具有上述方法,您可以使用PHP的
get\u class\u methods
函数,该函数只需要类名,它将返回所述类的方法。有关详细信息,请参阅


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

这是一个不错的解决方案,但需要注意的是,通过
包括
要求
隐藏文件,您将执行它。它是一个OOP类,所以它有函数和属性,而不仅仅是函数。这还能用吗?我也不明白数组的作用是什么?@silow:@ajreal的解决方案将创建一个函数名数组(在涉及目标文件之前),然后创建另一个数组。
array\u diff
函数允许您比较这两个数组,并查看由于涉及目标文件而添加的内容。@Lucanos,我现在明白了。感谢您的澄清。很好的解决方案,需要注意的是,通过
包含
要求
隐藏文件,您将执行它。它是一个OOP类,因此它具有函数和属性,而不仅仅是函数。这还能用吗?我也不明白数组的作用是什么?@silow:@ajreal的解决方案将创建一个函数名数组(在涉及目标文件之前),然后创建另一个数组。
array\u diff
函数允许您比较这两个数组,并查看由于涉及目标文件而添加的内容。@Lucanos,我现在明白了。谢谢你的澄清。