可以通过引用传递函数吗?
如下所示:
function call($func){
$func();
}
function test(){
echo "hello world!";
}
call(test);
我知道你可以做'test'
,但我真的不想那样做,因为我需要通过引用传递函数。
只有通过匿名函数才能做到这一点吗?
说明:如果您从C++回想一下,您可以通过指针传递函数:
void call(void (*func)(void)){
func();
}
或者在Python中:
def call(func):
func()
这就是我正在努力实现的目标。
发布于 2011-08-31 04:14:03
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
发布于 2011-06-25 09:15:28
不,函数不是PHP中的第一类值,它们不能通过它们的名称文字传递(这正是您所要求的)。甚至匿名函数或通过create_function
创建的函数也是通过对象或字符串引用传递的。
您可以将函数的名称作为字符串传递,将对象方法的名称作为(object, string)
数组传递,或者将匿名函数作为对象传递。这些函数都不传递指针或引用,它们只是传递函数的名称。所有这些方法都称为callback
伪类型:http://php.net/callback
发布于 2013-12-05 03:45:07
function func1(){
echo 'echo1 ';
return 'return1';
}
function func2($func){
echo 'echo2 ' . $func();
}
func2('func1');
结果:
echo1 echo2 return1
https://stackoverflow.com/questions/6475136
复制相似问题