如何调用具有动态参数量的函数?
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);
我有一个数组,我需要将数组的每个元素作为参数传递给一个函数。
说:
$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);