Извлечение имен функций из файла (с регулярными выражениями или без них) - PullRequest
1 голос
/ 07 января 2011

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

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

public function someFunction(

private function anotherOne(

Ответы [ 4 ]

4 голосов
/ 07 января 2011

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

# 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];
}
2 голосов
/ 07 января 2011

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

1 голос
/ 07 января 2011

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

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

1 голос
/ 07 января 2011

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

grep -P "function\s+\w" myfile.php
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...