Извлечение имен функций из файла (с регулярными выражениями или без них)

Как я могу извлечь все имена функций из файла PHP?

Файл имеет много функций, которые выглядят более или менее похожими на следующие. Является ли регулярное выражение лучшим способом сделать это?

public function someFunction( private function anotherOne( 

Вы можете найти их с регулярным выражением:

 # 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_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 со атрибутом стиля, с которым вы можете фильтровать.

Если ваш PHP- файл содержит класс, который имеет такие методы, как указано выше, после включения файла, вы можете использовать функцию get_class_methods для PHP, для которой требуется только имя класса, и она вернет методы указанного класса. Для получения дополнительной информации см. Get_class_methods .

Однако, если вы уверены в классах, но не знаете их имен, вы можете использовать первую функцию get_declared_classes для получения классов, а затем вы можете использовать вышеупомянутую функцию для методов этих классов.

Вы можете написать другой файл PHP для grep для этого, или если у вас есть Linux или Mac OS X, вы можете использовать что-то вроде:

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