我正在用PHP编写程序,为变量分配一个函数名并动态调用它。我有下面的代码,当我运行代码添加时,它显示所有人的答案。
function multiply($val1, $val2)
{
$mul = $val1 * $val2;
echo $mul;
}
function divide($val1, $val2)
{
$div = $val1 / $val2;
echo $div;
}
$func = plus($_POST['val1'], $_POST['val2']);
$func = minus($_POST['val1'],$_POST['val2']);
$func = multiply($_POST['val1'],$_POST['val2']);
$func = divide($_POST['val1'],$_POST['val2']);
请帮忙。
答案 0 :(得分:0)
使用您建议的代码,您不会创建4个动态调用的变量,而是调用4个函数plus,minus,multiply和divide。那些功能产生了输出,就像你实现它们一样。 $func
总是被这些函数的返回值所取代。
相反,如果你真的必须使用动态函数调用,你应该尝试这样的事情:
call_user_func($_POST['operation'],$_POST['val1'],$_POST['val2']);
请注意,对于生产,您确实应该验证post变量值。
答案 1 :(得分:0)
请查看如何使用变量函数here并使用您尝试过的完整代码进行检查。
也许你正试图做这样的事情:
function add($one, $two)
{
return $one + $two;
}
$funcname = "foo";
echo $funcname(1, 4);
答案 2 :(得分:0)
您还可以将您的函数实现为closure并传递该闭包。如果传递函数是你想要的。
$divide = function($val1, $val2) {
$div = $val1 / $val2;
echo $div;
};
$divide($_POST['val1'], $_POST['val2']);
other_function($divide, $param, $otherParam); // you could use the closure $divide inside this function.
但请不要忘记逃避您用于脚本的用户输入。
答案 3 :(得分:0)
以下是您可以尝试并使其符合您需求的内容。
function user_selection($operation,$op1,$op2){
switch ($operation){
case '+':
return $op1 + $op2;
break;
case '-':
return $op1 - $op2;
break;
case '*':
return $op1 * $op2;
break;
case '/':
return $op1 / $op2;
break;
}
}
并调用上面的函数,你可以把
$functionName = 'user_selection';
echo $functionName('+',1,2);
你可以通过改变参数,操作等来做不同的事情。为了更好地理解这件事的工作方式php manual for variable functions