你能在PHP数组中存储一个函数吗?
例如:
$functions = array(
'function1' => function($echo) { echo $echo; }
);
这可能吗?最好的选择是什么?
例如:
$functions = array(
'function1' => function($echo) { echo $echo; }
);
这可能吗?最好的选择是什么?
执行此操作的推荐方法是使用匿名函数:
$functions = [
'function1' => function ($echo) {
echo $echo;
}
];
如果要存储已声明的函数,则只需按名称将其引用为字符串即可:
function do_echo($echo) {
echo $echo;
}
$functions = [
'function1' => 'do_echo'
];
在旧版本的 PHP (<5.3) 中,不支持匿名函数,您可能需要求助于使用 create_function
(自 PHP 7.2 起已弃用):
$functions = array(
'function1' => create_function('$echo', 'echo $echo;')
);
所有这些方法都列在文档中可调用伪
类型下。
无论您选择哪种方式,都可以直接调用该函数(PHP ≥5.4),也可以使用call_user_func
/call_user_func_array
:
$functions['function1']('Hello world!');
call_user_func($functions['function1'], 'Hello world!');
由于 PHP “5.3.0 匿名函数可用”,因此使用示例:
请注意,这比使用旧create_function
快得多...
//store anonymous function in an array variable e.g. $a["my_func"]
$a = array(
"my_func" => function($param = "no parameter"){
echo "In my function. Parameter: ".$param;
}
);
//check if there is some function or method
if( is_callable( $a["my_func"] ) ) $a["my_func"]();
else echo "is not callable";
// OUTPUTS: "In my function. Parameter: no parameter"
echo "\n<br>"; //new line
if( is_callable( $a["my_func"] ) ) $a["my_func"]("Hi friend!");
else echo "is not callable";
// OUTPUTS: "In my function. Parameter: Hi friend!"
echo "\n<br>"; //new line
if( is_callable( $a["somethingElse"] ) ) $a["somethingElse"]("Something else!");
else echo "is not callable";
// OUTPUTS: "is not callable",(there is no function/method stored in $a["somethingElse"])
引用: