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

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

Stack Overflow用户
提问于 2011-06-25 09:08:07
回答 8查看 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

回答 8

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用户

发布于 2011-06-25 09:15:28

不,函数不是PHP中的第一类值,它们不能通过它们的名称文字传递(这正是您所要求的)。甚至匿名函数或通过create_function创建的函数也是通过对象或字符串引用传递的。

您可以将函数的名称作为字符串传递,将对象方法的名称作为(object, string)数组传递,或者将匿名函数作为对象传递。这些函数都不传递指针或引用,它们只是传递函数的名称。所有这些方法都称为callback伪类型:http://php.net/callback

票数 3
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提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6475136

复制
相关文章

相似问题

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