PHP动态调用函数

时间:2012-11-12 06:33:27

标签: php

我正在用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']);

请帮忙。

4 个答案:

答案 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