【问题标题】:How can I call a function with a dynamic amount of arguments?如何调用具有动态参数数量的函数?
【发布时间】:2015-05-15 07:51:55
【问题描述】:

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

说:

$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,接受多个参数。我需要从数组中导出参数。

有什么办法吗?

【问题讨论】:

  • 所以你想用这个数组调用mysqli_stmt_bind_param()
  • 可能是call_user_func_array(php.net/call_user_func_array) 和func_num_argsfunc_get_args ?
  • 为数组的每个值分配一个键。然后可以使用extract() 将数组拆分为变量。
  • 那么这个问题我们在哪里?

标签: php arrays mysqli prepared-statement bindparam


【解决方案1】:

这应该适合你:

首先,您需要创建一个引用相应变量的数组。您可以使用如下的 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));

【讨论】:

    【解决方案2】:

    您可以使用 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 始终是整数(就像在您的示例默认键中一样),那么这应该很好。

    【讨论】:

      【解决方案3】:

      call_user_func_array() 就是为了这个:

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

      【讨论】:

        猜你喜欢
        • 2015-05-31
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        • 2012-02-02
        • 2016-02-07
        • 2010-10-15
        • 2019-12-17
        相关资源
        最近更新 更多