PHP如何将func_get_args值作为参数列表传递给另一个函数?

我想创建一个函数(my_function()),该函数获取无限数量的参数并将其传递给另一个函数(call_another_function())


function my_function() {    
   another_function($arg1, $arg2, $arg3 ... $argN);    
}

因此,要致电my_function(1,2,3,4,5)并开始致电another_function(1,2,3,4,5)

我知道我应该使用func_get_args()将所有函数参数作为数组获取,但是我不知道如何将此参数传递给另一个函数.

可以使用 call_user_func_array() 函数来传递参数数组给另一个函数。

function my_function() {
    $args = func_get_args();
    call_user_func_array('another_function', $args);
}

这样,如果调用 my_function(1, 2, 3, 4, 5),它会传递参数数组 [1, 2, 3, 4, 5] 给 another_function 函数。

注意:call_user_func_array 函数需要两个参数,第一个参数是要调用的函数的名称(字符串),第二个参数是要传递的参数数组。

还可以使用 forward_static_call_array 或 forward_static_call 函数来实现类似的功能。

参考

function myFunction()
{
    $args = func_get_args();
    call_user_func_array('otherFunction', $args);
}

function otherFunction($arg1, $arg2, $arg3)
{
    // Do something with the arguments
}

myFunction('a', 'b', 'c');

代码, 用数组实现:

<?php
function another_function($args){
    echo gettype($args). "\n";
    foreach($args as $key=>$val){
        echo $key. ":". $val."\n";
    }
}
function my_function(){
    $args = func_get_args();
    another_function($args);
}

my_function('hello', 'world', '1');

?>

结果:

array
0:hello
1:world
2:1

或者 传入多维数组 数组KEY键可以动态传入

<?php
function another_function($params = array()){
    echo gettype($params). "\n";
    foreach($params as $k=>$v){
        echo $k. ":". $v. "\n";
    }
    
}
function my_function($params = array()){
    another_function($params);
}
my_function(['k1'=>'v1','k2'=>'v2']);

?>

/*
array
k1:v1
k2:v2
*/