将函数作为PHP中另一个函数的参数传递

时间:2014-04-28 10:11:03

标签: php function oop

我想将函数(不是结果)作为另一个函数的参数传递。假设我有

function double_fn($fn)

我希望两次运行给定函数($ fn)。 PHP中有这样的机制吗?我知道你在python函数中是一种变量但是PHP类似吗?

@edit 是否有类似的方法来使用方法?

function double_fn(parrot::sing())

3 个答案:

答案 0 :(得分:3)

它......有点不同。将函数名称作为字符串传递。

function foo()
{
  echo "foobar\n";
}

function double_fn($fn)
{
  $fn();
  $fn();
}

double_fn('foo');

答案 1 :(得分:2)

从5.3 (注释)开始,你可以很自然地使用闭包:

function double_fn(callable $fn)
{
    $fn();
    $fn();
}

double_fn(function() {
    echo "hi";
});

(注释)仅在5.4

之后输入提示

callable类型可以是一些东西:

  1. 包含要调用的函数名称的字符串
  2. 封闭(如上所述)
  3. 包含类(或实例)和调用方法
  4. 的数组

    手册中解释了上述示例。

    更新

      

    编辑是否有类似的方法来使用方法?

         

    function double_fn(parrot::sing())

    这样做会将parrot::sing()结果传递给函数;通过"参考"对于静态方法,您需要使用:

    double_fn('parrot::sing');
    double_fn(['parrot', 'sing']);
    

答案 2 :(得分:1)

您可以使用PHP 5.3.0中引入的anonymous functions

function double_fn($fn) {
  $fn();
}


double_fn(function(){
  // fonction body
});

或:

$myFn = function(){
  // fonction body
};

double_fn($myFn);