如何将函数作为参数传递给另一个函数?

时间:2011-12-23 01:49:53

标签: php closures php-5.3 lambda

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

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

3 个答案:

答案 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 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