PHP Mysqli并使用call_user_func_array

时间:2013-11-16 18:45:53

标签: php mysql mysqli

目前我正在使用:

call_user_func(
    $func,
        $_POST['a'],$_POST['b'],$_POST['c'],$_POST['d'],$_POST['e']
);

然而,随着脚本中的事情增长而调用。迫切需要像:

call_user_func_array(
    $func,
       $array("_POST", $_POST)
);

更明显。总而言之,我需要创建一个我相信的新阵列。因为在我的脚本中,除了$ _POST [headers]之外,每个$ _POST都被推送到$ func。虽然当我尝试上述内容时说:

函数名必须是字符串。

也许我只是不知道如何正确地解决这个问题。并且可以使用一些指导。谢谢。

一个如何调用它的例子:

function somefunc($a,$b,$c,$d,$e)

其中$ func被设置为其中一个函数,例如somefunc。然后,除了标题之外的所有数据都被推送到该函数。

我现在使用call_user_func的方式正常运行。虽然尝试转换,所以我不必总是添加它,并且它使用数组动态设置。

2 个答案:

答案 0 :(得分:1)

它没有你制作它那么复杂。

以下是call_user_func_array()工作电话的示例:

<?php

function somefunc($a, $b, $c)
{
        echo "a = $a\n";
        echo "b = $b\n";
        echo "c = $c\n";
}

$post = array('x'=>1, 'y'=>2, 'z'=>3);

$func = 'somefunc';
call_user_func_array($func, $post);

该函数有两个参数:

  • 第一个是 callable ,它可以只是一个函数的名称。
  • 第二个是数组。数组的以相同的顺序分配给函数的参数。数组的将被忽略。

您的表达式$array("_POST", $_POST)不正确。它将调用名称在变量$array中的函数。我认为你将这与对象的可调用语法混淆。


你在问题​​标题和标签中引用了mysqli,但是在你的问题中你没有提到与mysqli有关的事情。

call_user_func_array()与mysqli的最常见用法是当你想要使用可变数量的参数调用函数mysqli_stmt_bind_param()时,当你试图创建一个泛型函数来准备任何SQL语句时并将任意数量的参数绑定到它。

我过去曾多次发布过这个场景的答案:

答案 1 :(得分:1)

答案很简单。虽然PHP可以执行array_keys($ _ POST)和array_values($ POST)。它会尝试将键/值包含在header,func中。在我的情况下不需要。因此,而不是收集键/值并排除那些3.然后再将它们拆分。我将结果推送到2个数组,而不是名为$ postk和$ postv。

我从旧到新的变化:

<强> OLD:

call_user_func(
    $func,
        $_POST['a'],$_POST['b'],$_POST['c'],$_POST['d']
);

$i=0;
    foreach(array_diff_key(
           $_POST, array_flip(array('headers', 'func'))) as $k => $v){
        $postk[$i]=$k;
        $postv[$i]=$v;
        ++$i;
    }

call_user_func_array($ FUNC,$ postv);

通过这种方式,它允许我将任何长度的数组$ postk / $ postv推送到函数中。除了header,table,func。之外,POST是由POST设置的。

修改 我确实想在互联网上添加原始的帮助代码。正是帮助文本以及它与其他响应的位置最终给了我期望的结果。