Extracting function names from a file (with or without regular expressions)

后端 未结 4 1974
南旧
南旧 2020-12-20 06:59

How can I extract all function names from a PHP file?

The file has many functions that look more or less like the following. Is a regular expression the best way to

相关标签:
4条回答
  • 2020-12-20 07:13

    You could find them with a regular expression:

    # 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];
    }
    
    0 讨论(0)
  • 2020-12-20 07:13

    If your PHP file contains a class which are having methods like above as you mentioned, after including file, you can use get_class_methods function of PHP which requires only the classname and it will return the methods of a mentioned class. For more information, see get_class_methods.

    However, if you are sure about classes but don't know the names of it then you can use the first get_declared_classes function to get classes, and then you can use the above mentioned function to the methods of those classes.

    0 讨论(0)
  • 2020-12-20 07:15

    You can write another PHP file to grep for that, or if you have Linux or Mac OS X, you can use something like:

    grep -P "function\s+\w" myfile.php
    
    0 讨论(0)
  • 2020-12-20 07:29

    If the PHP file is syntactically correct and only contains function only, you can store the result of get_defined_functions into an array (anyway, is return an array).

    include_once the PHP file, compare the latest get_defined_functions with the previous array (like array_diff). Whichever results returned by array_diff are the functions define in the PHP file.

    If is an object declaration, the above won't work, although you can make use of function get_class_method, but it is not able to return protected and private methods.

    OR

    ob_start();
    highlight_string(file_get_contents('class.php'));
    $html = ob_get_contents();
    ob_end_clean();
    $dom = new DomDocument;
    $dom->loadHTML($html);
    

    You can have a list of DOM with a style attribute you can filter with.

    0 讨论(0)
提交回复
热议问题