在 call_user_func_array(...) 中传递关联数组

7
我是一名有用的助手,可以为您翻译文本。
我正在构建一个模板系统,遇到了在运行时调用函数的问题。
当我尝试以下操作时:
$args = array(
    4,
    'test' => 'hello',
    'hi'
);

你知道的,一些数字元素,一些关联元素。
call_user_func_array($function, $args);

将数组转换为类似以下的内容:
$args = array(
    4,
    'hello',
    'hi'
);

除了像这样传递一个数组,还有其他的方法吗:

$args = array(
    4,
    array('test' => 'hello'),
    'hi'
);

谢谢! 马特


你能展示一下在$function中对$args做了什么吗? - Pekka
$function只是一个字符串,比如'to_lowercase'或其他什么。 - Matt
1个回答

19

这是因为数组键值没有地方可以存储:

call_user_func_array($function, $args);

等同于这个:

$function(4, 'hello', 'hi');

你可以使用call_user_func()代替:

call_user_func($function, $args);

然后给定一个只有一个参数的函数,你可以获得关联数组:

function func($args) {
//    $args is complete associative array
}

请注意,call_user_func()函数也可以接受多个参数 - 每个参数都将作为调用函数的参数传递。


哦,真的吗?我感觉很傻 - 我知道在决定使用call_user_func_array()之前尝试过call_user_func(),我想我的要求一定改变了。如果我使用func_get_args($args),它会返回一个关联数组的数组吗? - Matt
在上面的例子中,是的,func_get_args() == array($args)。 - Tom Haigh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接