get_defined_functions

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

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

描述

get_defined_functions(bool $exclude_disabled = true): array

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

参数

exclude_disabled

是否应从返回值中排除禁用的函数。

返回值

返回一个多维数组,其中包含所有已定义函数的列表,包括内置(内部)函数和用户定义函数。内部函数可以通过 $arr["internal"] 访问,用户定义函数可以通过 $arr["user"] 访问(参见下面的示例)。

变更日志

版本 描述
8.0.0 exclude_disabled 参数的默认值已从 false 更改为 true
7.0.15, 7.1.1 添加了 exclude_disabled 参数。

示例

示例 #1 get_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
        )

)

参见

添加备注

用户贡献的备注 11 个备注

15
kkuczok at gmail dot com
11 年前
您可以使用 ReflectionFunction 类列出所有参数。无需像 Nguyet.Duc 建议的那样解析选定的文件/文件。

https://php.net/manual/pl/class.reflectionfunction.php

示例
<?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);
?>

输出
数组
(
[0] => function foo ( &&bar, &big, [$small = 1] )

[1] => function bar ( &foo )

[2] => function noparams ( )

[3] => function byrefandopt ( [&$the = one] )

)
10
mIHATESPAMduskis at bates dot edu
21 年前
至少在 GNU/Linux/Apache 平台上的 PHP 4.2.3 中,get_defined_functions() 返回用户定义的函数作为全小写字符串,无论函数在定义时如何大写。

把我弄糊涂了。
6
peten at spam dot me dot not dot frontiernet dot net
22 年前
以下是 get_defined_functions 函数的一个有用技巧 - 显示所有可用函数以及指向文档的链接(您甚至可以更改它指向的镜像)

<?php
// php 镜像
$php_host = "http://us2.php.net/";

// 我们表格中的列数
$num_cols = 3;

$ar = get_defined_functions();
$int_funct = $ar[internal];
sort($int_funct);
$count = count($int_funct);
?>
<html>
<head>
<title>
可用的 PHP 函数
</title>
</head>
<body>
<p>
<?php print $count; ?> 个函数
可用于
<?php
print $_SERVER[SERVER_NAME];
?>
(<a href="<?php print $php_host;?>"
target="phpwin">php</a>
版本
<?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>
6
berchentreff at berchentreff dot de
18 年前
看看这里,列出你 PHP 版本中定义的所有函数,并以链接到 PHP 手册的格式输出。

<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>
2
Muneeb Aslam
8 年前
这是一个非常简单且易懂的脚本,用于获取函数名并链接到 php.net 上的函数手册页面。希望对大家有所帮助。脚本的注释是自解释的。

<?php

/* 声明一个变量指向 PHP 函数手册。
将 $lng 修改为目标语言,
例如 en/es/de 等 */
$lng = "es";
$url = "https://php.net/manual/".$lng."/function.";

// 获取定义的函数到一个变量中(它将是一个二维数组)
$functions = get_defined_functions();

// 运行嵌套的 foreach 循环来获取函数名
foreach($functions as $function){
foreach (
$function as $functionName){

/* 由于 PHP 手册使用连字符而不是下划线
来表示函数名,因此需要将所有下划线
转换为连字符。 */
if(strpos($functionName,"_") !== false){
$functionForURL = str_replace("_","-",$functionName);
} else {
$functionForURL = $functionName;
}

/* 输出链接 */
echo "<a href='".$url.$functionForURL.".php'>".$functionName."</a><br />";
}
}

?>
5
strrev xc.noxeh@ellij
16 年前
请注意,使用 create_function() 创建的函数不会被返回。
(不过这可能在以后的版本中会改变)
1
Muneeb Aslam
8 年前
我们还可以使用这个简单的 foreach 循环来获取函数名。

<?php

// 由于它是一个二维数组
$functions = get_defined_functions();

// 我们可以使用嵌套的 foreach 循环来获取函数名
foreach($functions as $function){
foreach(
$function as $thisFunc){
echo
$thisFunc . "<br />";
}
}

?>
1
spudinski at gmail dot com
16 年前
用于搜索函数。
<html>
<head>
<title>所有内部函数列表</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">
搜索: <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>
1
Nguyet.Duc
13 年前
get_defined_functions() 仅返回函数名列表,不包括函数参数。以下是列出用户定义函数名及其参数的代码。

<?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;
?>

输出

/* 本文件中的函数 */
/**************************/
// add_data($data)
// add_files($list)
// archive($name)
// bzip_file($name)
0
rob at webdimension dot co dot uk
13 年前
使用此函数的快速方法

<?php
// 所有用户定义函数
$arr = get_defined_functions();
foreach (
$arr['user'] as $key => $value){
echo
$value.'<br />';
}
// 所有用户定义函数

// 所有内部函数
$arr = get_defined_functions();
foreach (
$arr['internal'] as $key => $value){
echo
$value.'<br />';
}
// 所有内部函数
?>
-1
ChaosKaizer
16 年前
用于用户定义函数

<?php
/**
* @param string $function_name 用户函数名称,以字符串形式。
* @return 如果 function_name 存在并且是函数,则返回 TRUE,否则返回 FALSE。
*/
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]) );
}
?>
To Top