Мне нужно получить список функций с их содержимым (а не только именем функции) из php-файла. Я пытался использовать регулярное выражение, но у него много ограничений. он не анализирует все типы функций. например, он терпит неудачу, если функция имеет команды if и for loop.Как получить список заявленных функций с их данными из php-файла?
в деталях: У меня около 100 включенных файлов. каждый файл имеет количество объявленных функций. некоторые файлы дублируются в других файлах. поэтому я хочу получить список всех функций из определенного файла, а затем поместить этот список внутри массива, тогда я буду использовать уникальный массив, чтобы удалить дубликаты. Я читал о токенизаторе, но я действительно не знаю, как заставить его захватить объявленную функцию с ее данными. все у меня есть это:
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;
}
, к сожалению, эта функция перечисляет только имена функций .. то, что мне нужно, чтобы перечислить заявленную функцию целого с его структурой .. поэтому любые идеи?
заранее спасибо ..
Вы хотите, чтобы тело функции, например, когда вы найдете 'function foo() {return 'foo';}' вы хотите, чтобы он возвращал 'return 'foo;''. Просьба привести пример ожидаемых результатов. А также предоставите более подробную информацию о том, зачем вам это нужно в первую очередь. – Gordon
Я работаю над скриптом под названием «includeer». это используется для анализа файлов php, содержащих инструкции include. поэтому мы читаем путь включений и получаем данные с помощью file_get_contents. и верните их в основной файл. У меня около 100 файлов include. каждый из этих файлов имеет некоторые функции. некоторые из этих функций были повторно объявлены в других файлах. поэтому я хочу, чтобы список всех функций из всех этих файлов содержал эти функции, тогда мне нужно поместить их внутрь массива и, наконец, использовать array_unique для удаления дубликатов. если у вас есть лучшее решение, пожалуйста, просветите меня .. спасибо, – ermac2014