目前我正在使用:
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的方式正常运行。虽然尝试转换,所以我不必总是添加它,并且它使用数组动态设置。
答案 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);
该函数有两个参数:
您的表达式$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设置的。
修改强> 我确实想在互联网上添加原始的帮助代码。正是帮助文本以及它与其他响应的位置最终给了我期望的结果。