我有一系列功能a()
,b()
,c()
我有一个main()
功能。
根据具体情况,我需要将一个不同的函数传递给main()来使用 在javascript中它将是:
var a = function(){}
var b = function(){}
var c = function(){}
var func = (some logic) a, b or c;
main(func);
我如何在php5.3中这样做?
我试图避免使用
$func_name = "a";
main($func_name){
$func_name();
}
或者可能是最好的方式,我不应该使用任何类型的闭包?
答案 0 :(得分:2)
PHP 5.3中的相同想法,因为您可以创建anonymous functions:
$sayHello = function($var)
{
echo "Hello ", $var;
};
// Logic here to determine what $func is set to
$func = $sayHello;
function callCustom($function)
{
if(!is_callback($function))
{
// throw exception
}
$function("World");
}
callCustom($func); // Hello World
答案 1 :(得分:0)
试试这个:
$a = function(){};
$b = function(){};
$c = function(){};
switch (rand(0, 2)) {
case 0: $func = $a; break;
case 1: $func = $b; break;
case 2: $func = $c; break;
}
var_dump($func);
您可以在此处查看一个有效的示例http://codepad.viper-7.com/Ut5yGQ
注意:我使用var_dump
代替main
,因为main
未定义
答案 2 :(得分:0)
在PHP中,可以调用(调用)任何“可调用”(is_callable
Docs)的东西。手册通常将这些参数命名为Callback, a pseudo-type in PHPDocs。
您可以使用任何不同的回调并将它们作为函数参数传递:
function main($callback)
{
call_user_func($callback);
}
然后你的函数将适用于任何有效的PHP回调。
接下来,可以使用变量调用函数,例如:
变量函数调用:
function name() {};
$function = 'name'; # function name as string
$function(); # invoke
匿名函数作为变量函数调用:
$function = function() {}; # define function
$function(); # invoke