在PHP中如何通过引用传递函数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (170)

就像这样:

function call($func){
    $func();
}

function test(){
    echo "hello world!";
}

call(test);

我知道你可以'test',但我并不是真的想那样做,因为我需要通过引用传递函数。

这是通过匿名函数来实现的唯一方法吗?

澄清:C++,可以通过指针传递一个函数:

void call(void (*func)(void)){
    func();
}

或者在Python中:

def call(func):
    func()

这就是我想要完成的。

提问于
用户回答回答于

PHP 5.3中,如此处所示

function doIt ($fn) {
  echo "doIt\n";
  return $fn();
}

function doMe () {
  echo "doMe\n";
}

// I am using a closure here.
// There may be a more clever way to "get the function-object" representing a given
// named function, but I do not know what it is. Again, I *don't use PHP* :-)
echo doIt(function () { doMe(); });
用户回答回答于

问题在于call_user_func()传递的是被调用的函数的返回值,而不是函数本身。

解决办法。

function funcRef($func){
  return create_function('', "return call_user_func_array('{$func}', func_get_args());");
}

function foo($a, $b, $c){
    return sprintf("A:%s B:%s C:%s", $a, $b, $c);
}

$b = funcRef("foo");

echo $b("hello", "world", 123);

//=> A:hello B:world C:123

ideone.com演示

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励