2011-12-23 106 views
2

我有一个功能列表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(); 
} 

或者可能这是最好的方式,我不应该使用任何类型的倒闭?

回答

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 
+0

+1对于一个非常体面的解释佚功能 – Cyclone 2011-12-23 02:03:32

+0

有没有办法键入提示呢? '函数xxx(func $ function){} – 2011-12-23 03:34:05

+0

@ItayMoav:你不能输入提示回调,但是你可以添加一个条件来检测参数是不是回调。 – 2011-12-23 13:48:07

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未定义

0

在PHP中,任何“可调用的”(is_callable­Docs)都可以调用(调用)。该手册通常将这些参数命名为Callback, a pseudo-type in PHP­Docs

你可以使用任何不同的回调,并将它们传递作为函数参数:

function main($callback) 
{ 
    call_user_func($callback); 
} 

那么你的功能将与任何有效的PHP回调的工作。

变量函数调用:

function name() {}; 
    $function = 'name'; # function name as string 
    $function(); # invoke 

匿名函数作为变量函数调用:

$function = function() {}; # define function 
    $function(); # invoke 

下一步是,功能可以通过使用变量,一些实例中被称为

还请参阅Variable Functions­Docs

相关问题