За последние 24 часа нас посетил 62921 программист и 1746 роботов. Сейчас ищут 855 программистов ...

Извлечение всех функций из php кода

Тема в разделе "PHP для новичков", создана пользователем Yankovitz, 6 июл 2018.

  1. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Добрый день. Есть некий php код, который нужно проанализировать: а именно получить все функции. Для извлечения названий использую token_get_all:
    Перебор лексем происходит так:
    Код (Text):
    1. switch ($id) {
    2.     case T_NAMESPACE:
    3.         $waitingNamespace = true;
    4.         $waitingNamespaceSeparator = false;
    5.         $namespace = array();
    6.         break;
    7.     case T_FUNCTION: // if you want get a functions
    8.     case T_INTERFACE:
    9.         $waitingClassName = true;
    10.         break;
    11.     case T_STRING:
    12.         if ($waitingNamespace) {
    13.             $namespace[] = $value;
    14.             $waitingNamespace = false;
    15.             $waitingNamespaceSeparator = true;
    16.         } elseif ($waitingClassName) {
    17.             if (!empty($namespace)) {
    18.                 $value = sprintf('%s\\%s', implode('\\', $namespace), $value);
    19.             }
    20.             $result[] = $value;
    21.             $waitingClassName = false;
    22.         }
    23.         break;
    24.     case T_NS_SEPARATOR:
    25.         if ($waitingNamespaceSeparator && !$waitingNamespace && !empty($namespace)) {
    26.             $waitingNamespace = true;
    27.             $waitingNamespaceSeparator = false;
    28.         }
    29.         break;
    30. }
    Однако, $result возвращает список всех функций(и методов, если это класс), в том числе, те, которые используются в классах. Подскажите, как получить все функции вне классов?
    --- Добавлено ---
    Немного подумал, вижу только таким способом: могу получить список имен классов. Затем, через get_class_methods получить в массив список методов в классах. После чего, из списка всех функций удалить те, которые совпадают с названиями методов. Но не уверен, что лишнее не выбросит. Прошу помощи более старших товарищей.
     
    #1 Yankovitz, 6 июл 2018
    Последнее редактирование: 6 июл 2018
  2. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
  3. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Я так понимаю get_defined_functions работает только с объявленными функциями, а мне необходимо просто извлечь из кода, представленного как текст
     
  4. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    PHP:
    1. <?php
    2.  
    3.  
    4. class testClass
    5. {
    6.  
    7.  
    8. private function testOne()    {
    9.     return true;
    10. }
    11.  
    12. private function testTwo(){
    13.     return true;
    14. }
    15.  
    16. public function result(){
    17.  
    18.     if ($this->testOne() === $this->testTwo()) {
    19.         return 'Ok';
    20.     }
    21. }
    22.  
    23. }
    24.  
    25. $obj = new testClass;
    26. echo $obj->result();
    27.  
    28. echo "<BR>";
    29.  
    30. function myFirstFunction(){
    31.     return "Is My First Function!";
    32. }
    33.  
    34. function myTwoFunction(){
    35.     return "Is My Two Function!";
    36. }
    37.  
    38. echo myFirstFunction();
    39.  
    40. echo "<BR>";
    41.  
    42. echo myTwoFunction();
    43.  
    44.  
    45.  
    46. echo "<pre>";
    47. print_r($arr['user']);
    48. echo "</pre>";
    49.  
    50. ?>
    разве это не удовлетворяет твой запрос: Подскажите, как получить все функции вне классов?
    ???
    --- Добавлено ---
    Ну так она тебе и выводит ассоциативный массив, в котором как раз твои функции за пределами класса, т.е. за пределами класса это функции, в классе это методы класса.
     
  5. Yankovitz

    Yankovitz Активный пользователь

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Дело в том, что необходимо извлечь функции, которые могут вообще в принципе не обрабатываться интерпретатором. Просто загружаю код в виде текстового файлика, и считывает данные.