• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • get_defined_functions()

    (PHP 4 >= 4.0.4, PHP 5, PHP 7)

    返回所有已定义函数的数组

    说明

    get_defined_functions([bool $exclude_disabled=FALSE]): array

    获取所有已定义函数的数组。

    参数

    $exclude_disabled

    禁用的函数是否应该在返回的数据里排除。

    返回值

    返回数组,包含了所有已定义的函数,包括内置(internal)和用户定义的函数。可通过$arr["internal"]来访问系统内置函数,通过$arr["user"]来访问用户自定义函数(参见示例)。

    更新日志

    版本说明
    PHP 7.0.15, PHP 7.1.1增加$exclude_disabled参数。

    范例

    Example #1get_defined_functions()例子

    <?php
    function myrow($id, $data)
    {
        return "<tr><th>$id</th><td>$data</td></tr>\n";
    }
    $arr = get_defined_functions();
    print_r($arr);
    ?>
    

    以上例程的输出类似于:

    Array
    (
        [internal] => Array
            (
                [0] => zend_version
                [1] => func_num_args
                [2] => func_get_arg
                [3] => func_get_args
                [4] => strlen
                [5] => strcmp
                [6] => strncmp
                ...
                [750] => bcscale
                [751] => bccomp
            )
        [user] => Array
            (
                [0] => myrow
            )
    )
    

    参见

    You can list all arguments using ReflectionFunction class. It's not necessary to parse selected files/files as suggested by Nguyet.Duc.
    http://php.net/manual/pl/class.reflectionfunction.php
    Example:
    <?php
    function foo(&$bar, $big, $small = 1) {}
    function bar($foo) {}
    function noparams() {}
    function byrefandopt(&$the = 'one') {}
    $functions = get_defined_functions();
    $functions_list = array();
    foreach ($functions['user'] as $func) {
        $f = new ReflectionFunction($func);
        $args = array();
        foreach ($f->getParameters() as $param) {
            $tmparg = '';
            if ($param->isPassedByReference()) $tmparg = '&';
            if ($param->isOptional()) {
                $tmparg = '[' . $tmparg . '$' . $param->getName() . ' = ' . $param->getDefaultValue() . ']';
            } else {
                $tmparg.= '&' . $param->getName();
            }
            $args[] = $tmparg;
            unset ($tmparg);
        }
        $functions_list[] = 'function ' . $func . ' ( ' . implode(', ', $args) . ' )' . PHP_EOL;
    }
    print_r($functions_list);
    ?>
    Output:
    Array
    (
      [0] => function foo ( &&bar, &big, [$small = 1] )
      [1] => function bar ( &foo )
      [2] => function noparams ( )
      [3] => function byrefandopt ( [&$the = one] )
    )
    Here's a useful trick with the get_defined_functions function - show all available functions with a link to the documentation (you can even change the mirror it goes to):
    <?php
     // the php mirror 
     $php_host = "http://us2.php.net/";
     // the number of cols in our table
     $num_cols = 3;
     $ar = get_defined_functions();
     $int_funct = $ar[internal];
     sort($int_funct);
     $count = count($int_funct);
    ?>
    <html>
     <head>
     <title>
      Available PHP Functions
     </title>
     </head>
     <body>
     <p>
      <?php print $count; ?> functions   
      available on 
      <?php 
       print $_SERVER[SERVER_NAME]; 
       ?>
      (<a href="<?php print $php_host;?>" 
      target="phpwin">php</a>
      version 
      <?php print phpversion(); ?>)
     </p>
     <table align="center" border="2">
      <tr> 
    <?php
     for($i=0;$i<$count;$i++) {
      $doc = $php_host 
       . "manual/en/function."
       . strtr($int_funct[$i], "_", "-") 
       . ".php";
      print "  <td><a href=\"" . $doc 
       . "\" target=\"phpwin\">" 
       . $int_funct[$i] 
       . "</a></td>\n";
      if(($i > 1) 
       && (($i+$num_cols)%$num_cols==($num_cols-1)))  
       print "  </tr>\n  <tr>\n";
      }
     for($i=($num_cols-($count%$num_cols));$i>0;$i--) 
      print "  <td>&nbsp;</td>\n";
    ?>
     </table>
     </body>
    </html>
    Please note that functions created with create_function() are not returned.
    (However that might change in a later version)
    At least with PHP 4.2.3 on a GNU/Linux/Apache platform, get_defined_functions() returns user-defined functions as all-lower case strings regardless of how the functions are capitalized when they are defined.
    Threw me for a loop.
    look at here, list all the defined function on your php-Version and give as well formatted output width links onto the php-manual:
    <html><head>
    <style type="text/css"><!--
    li{font-family:Verdana,Arail,sans-serif;width:500px;margin-top:7px;}
    a{padding:4px;}
    a.a1{font-size:12px;background-color:#CCCCCC;color:#663300;}
    a.a1:hover{background-color:#663300;color:#CCCCCC;}
    a.a1:visited{background-color:#fff;color:#999;}
    a.a1:visited:hover{background-color:#fff;color:#999;}
    a.a0{font-size:12px;background-color:#CCCCFF;color:#663399;}
    a.a0:hover{background-color:#663399;color:#CCCCFF;}
    a.a0:visited{background-color:#ffC;color:#999;}
    a.a0:visited:hover{background-color:#ffC;color:#999;}
    --></style>
    </head><body style="background-color:#999;">
    <?php
    $arr = get_defined_functions();
    foreach($arr as $zeile){
    sort($zeile);$s=0;
    foreach($zeile as $bzeile){
    $s=($s)?0:1;
    echo "<li><a class='a".$s."' href='http://de.php.net/".$bzeile."'>".$bzeile."</a></li>";}
    }
    ?>
    </body>
    </html>
    To search for a function.
    <html>
    <head>
    <title>List of all Internal functions</title>
    <style type="text/css">
    body {
      background-color:#FFFFFF;
      color:#222222;
      font-size: 11px;
      font-family: arial, tahoma;
    }
    table {
      color:#222222;
      font-size: 11px;
      font-family: arial, tahoma;
    }
    tr.found {
      background-color:#66EE00;
      font-weight: bold;
    }
    a:link {
      color:#222222;
    }
    a:visited {
      color:#CCCCCC;
    }
    a:active {
      color:#444444;
    }
    a:hover {
      text-decoration: underline;
    }
    </style>
    </head>
    <body>
    <p>
      <form method="GET">
      Search: <input type="text" name="search"><br>
      <input type="submit">
      </form>
    </p>
    <?php
      if (!empty($_GET['search'])) {
        echo '<p>' . '<a href="#' . $_GET['search'] . '">' .
        'Goto ' . $_GET['search'] . '</a>' . 
        '<script type="text/javascript">
          window.onload = function() {
            document.location += "#' . $_GET['search'] . '";
            return true;
          }
        </script>
        </p>';
      }
    ?>
    <p>
      <table>
    <?php
      $country = 'us';
      $functions = get_defined_functions();
      $functions = $functions['internal'];
      $num = 0;
      foreach($functions as $function) {
        $num++;
        echo '<tr ' . (($_GET['search'] == $function) ? 'class="found"' : '') . '><td>' . 
        number_format($num) . '</td><td>' . '<a name="' . $function . '" href="http://' . $country . '.php.net/' . 
        $function . '">' . $function . '</a>' . '</td></tr>';
      }
    ?>
      </table>
    </p>
    </body>
    </html>
    We can also get the function names with this simple foreach
    <?php
      
      //Since its a two dimensional array
      $functions = get_defined_functions();
       
      //We can use nested foreach to get the function names
      foreach($functions as $function){
         foreach($function as $thisFunc){
           echo $thisFunc . "<br />";
         }
       }
      
    ?>
    
    This is rather a simple non-confusing script to get the function names linked to its manual page on php.net. Hope it helps someone. Commented script is self explainatory
    <?php
      
      /*declare a variable to php manual of functions.
      change the $lng to the region you want it for,
      i-e en/es/de etc etc */
      $lng = "es";
      $url = "http://www.php.net/manual/".$lng."/function.";
      
      // get defined functions in a variable (it will be a 2D array)
      $functions = get_defined_functions();
      
      // Run nested foreach to get the function names
      foreach($functions as $function){
        foreach ($function as $functionName){
          
          /* Since php manual is using hyphens instead of underscores
          for functions, we will convert underscores to hyphen whereever
          there is one. */
          if(strpos($functionName,"_") !== false){
            $functionForURL = str_replace("_","-",$functionName);
          } else {
            $functionForURL = $functionName;
          }
          
          /* echo the link */
          echo "<a href='".$url.$functionForURL.".php'>".$functionName."</a><br />";
        }
      }
      
    ?>
    
    get_defined_functions() just returns a list of function names without function arguments. Here is the code to list user-defined function names plus arguments:
    <?php
      $content = file_get_contents('example.php');
      preg_match_all("/(function )(\S*\(\S*\))/", $content, $matches);
      foreach($matches[2] as $match) {
        $function[] = "// " . trim($match) . "<br />\n";
      }
      natcasesort($function);
      $functionlist .= "/* Functions in this file */<br />\n";
      $functionlist .= "/**************************/<br />\n\n";
      $functionlist .= implode('', $function);
      echo $functionlist;
    ?>
    Output:
    /* Functions in this file */
    /**************************/
    // add_data($data)
    // add_files($list)
    // archive($name)
    // bzip_file($name)
    A quick way of using this function:
    <?php
    // ALL USER DEFINED FUNCTIONS
    $arr = get_defined_functions();
    foreach ($arr['user'] as $key => $value){
    echo $value.'<br />';
    }
    // ALL USER DEFINED FUNCTIONS
    // ALL INTERNAL FUNCTIONS
    $arr = get_defined_functions();
    foreach ($arr['internal'] as $key => $value){
    echo $value.'<br />';
    }
    // ALL INTERNAL FUNCTIONS
    ?>
    
    for user defined function
    <?php
    /**
     * @param string $function_name The user function name, as a string.
     * @return Returns TRUE if function_name exists and is a function, FALSE otherwise.
     */
    function user_func_exists($function_name = 'do_action') {
      
      $func = get_defined_functions();
      
      $user_func = array_flip($func['user']);
      
      unset($func);
      
      return ( isset($user_func[$function_name]) );  
    }
    ?>