Как получить список функций, которые объявляются в php файле
Вы можете получить список определенных в настоящее время функций, using get_defined_functions ()
:
$arr = get_defined_functions();
var_dump($arr['user']);
Внутренние функции находятся по индексу internal
, а пользовательские функции - по индексу user
.
Обратите внимание, что это выведет все функции, которые были объявлены до этого вызова. Это означает, что если вы include ()
файлы с функциями, они также будут в списке. Нет другого способа разделить функции для каждого файла, кроме как убедиться, что вы не include ()
ни один файл до вызова get_defined_functions ()
.
Если у вас должен быть список функций для каждого файла, следующий попытается получить список функций путем анализа источника.
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;
}
Используйте на свой страх и риск.
Вы можете использовать функцию get_defined_functions ()
, чтобы получить все функции, определенные в вашем текущем скрипте.
См .: http://www.php.net/manual/en/function.get-defined-functions.php
Если вы хотите получить функции, определенные в другом файле, вы можете попробовать использовать http://www.php.net/token_get_all вот так:
$arr = token_get_all(file_get_contents('anotherfile.php'));
Затем вы можете пройти через цикл, чтобы найти токены функций с определенными символами. Список токенов можно найти http://www.php.net/manual/en/tokens.php
включите в файл и попробуйте следующее:
$functions = get_defined_functions();
print_r($functions['user']);