首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中通过引用传递函数

在PHP中通过引用传递函数
EN

Stack Overflow用户
提问于 2011-06-25 09:08:07
回答 7查看 43.4K关注 0票数 33

可以通过引用传递函数吗?

如下所示:

代码语言:javascript
复制
function call($func){
    $func();
}

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

call(test);

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

只有通过匿名函数才能做到这一点吗?

说明:如果您从C++回想一下,您可以通过指针传递函数:

代码语言:javascript
复制
void call(void (*func)(void)){
    func();
}

或者在Python中:

代码语言:javascript
复制
def call(func):
    func()

这就是我正在努力实现的目标。

EN

回答 7

Stack Overflow用户

发布于 2011-08-31 04:14:03

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

我以前也遇到过这个问题,下面是我想出的解决方案。

代码语言:javascript
复制
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 demo

票数 16
EN

Stack Overflow用户

发布于 2013-12-05 03:45:07

代码语言:javascript
复制
function func1(){
    echo 'echo1 ';
    return 'return1';
}

function func2($func){
    echo 'echo2 ' . $func();
}

func2('func1');

结果:

代码语言:javascript
复制
echo1 echo2 return1
票数 3
EN

Stack Overflow用户

发布于 2013-03-08 23:20:52

在PHP 5.4.4 (没有测试过更低版本或其他版本)中,您可以完全按照您的建议执行操作。

以此为例:

代码语言:javascript
复制
function test ($func) {
    $func('moo');
}

function aFunctionToPass ($str) {
    echo $str;
}

test('aFunctionToPass');

该脚本将回显"moo“,就好像您直接调用了"aFunctionToPass”一样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6475136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档