如何调用具有动态参数量的函数?

How can I call a function with a dynamic amount of arguments?

我有一个数组,我需要将数组的每个元素作为参数传递给一个函数。

说:

$var = array("var2","var3","var4");
//Pass each element as a new parameter to a function
call_to_function ($var2, $var3, $var4);

//However, if the number of array element change it can be
$var = array("var2","var3");
call_to_function ($var2,$var3);

这里的问题是,如何构建动态参数数量并调用函数。

使用: PHP 函数 mysqli_stmt::bind_param,接受多个参数。我需要从数组中导出参数。

有什么办法吗?

这应该适合你:

首先,您需要创建一个包含对相应变量的引用的数组。您可以使用如下所示的 foreach 循环简单地执行此操作:

foreach($var as $v) {
        $bindValues[] = &$$v; 
}

之后你可以使用call_user_func_array()调用函数来绑定变量。这里取决于你是使用过程式还是 OOP 式:

程序:

call_user_func_array("mysqli_stmt_bind_param", array_merge([$stmt, $types], $bindValues));

糟糕:

call_user_func_array([$stmt, "bind_param"], array_merge([$types], $bindValues));

您可以使用 eval() 调用具有动态参数数量的函数。

// Construct the parameter string like "$var[0], $var[1], $var[2]"
$param_str = '';
foreach($var as $key => $val) {
    $param_str .= '$var['.$key.'],';
}
$param_str = rtrim($param_str, ',');

eval('call_to_function('.$param_str.');');

eval() 的使用不被认为是好的做法,但如果您确定数组键 $var 始终是整数(就像在您的示例默认键中一样),那么这应该是好的。

call_user_func_array() 就是为了这个:

call_user_func_array(array($stmt, 'bind_param'), $var);