Добрый день. Есть некий php код, который нужно проанализировать: а именно получить все функции. Для извлечения названий использую token_get_all: Перебор лексем происходит так: Код (Text): switch ($id) { case T_NAMESPACE: $waitingNamespace = true; $waitingNamespaceSeparator = false; $namespace = array(); break; case T_FUNCTION: // if you want get a functions case T_INTERFACE: $waitingClassName = true; break; case T_STRING: if ($waitingNamespace) { $namespace[] = $value; $waitingNamespace = false; $waitingNamespaceSeparator = true; } elseif ($waitingClassName) { if (!empty($namespace)) { $value = sprintf('%s\\%s', implode('\\', $namespace), $value); } $result[] = $value; $waitingClassName = false; } break; case T_NS_SEPARATOR: if ($waitingNamespaceSeparator && !$waitingNamespace && !empty($namespace)) { $waitingNamespace = true; $waitingNamespaceSeparator = false; } break; } Однако, $result возвращает список всех функций(и методов, если это класс), в том числе, те, которые используются в классах. Подскажите, как получить все функции вне классов? --- Добавлено --- Немного подумал, вижу только таким способом: могу получить список имен классов. Затем, через get_class_methods получить в массив список методов в классах. После чего, из списка всех функций удалить те, которые совпадают с названиями методов. Но не уверен, что лишнее не выбросит. Прошу помощи более старших товарищей.
Я так понимаю get_defined_functions работает только с объявленными функциями, а мне необходимо просто извлечь из кода, представленного как текст
PHP: <?php class testClass { private function testOne() { return true; } private function testTwo(){ return true; } public function result(){ if ($this->testOne() === $this->testTwo()) { return 'Ok'; } } } $obj = new testClass; echo $obj->result(); echo "<BR>"; function myFirstFunction(){ return "Is My First Function!"; } function myTwoFunction(){ return "Is My Two Function!"; } echo myFirstFunction(); echo "<BR>"; echo myTwoFunction(); $arr = get_defined_functions(); echo "<pre>"; print_r($arr['user']); echo "</pre>"; ?> разве это не удовлетворяет твой запрос: Подскажите, как получить все функции вне классов? ??? --- Добавлено --- Ну так она тебе и выводит ассоциативный массив, в котором как раз твои функции за пределами класса, т.е. за пределами класса это функции, в классе это методы класса.
Дело в том, что необходимо извлечь функции, которые могут вообще в принципе не обрабатываться интерпретатором. Просто загружаю код в виде текстового файлика, и считывает данные.