动态调用函数,从变量传递参数

时间:2013-07-24 18:45:44

标签: php function dynamic

这是我的ajax_handle文件:

   if ($_SERVER['HTTP_X_REQUESTED_WITH'] !== "XMLHttpRequest") 
    {
        echo "Error"; 
        exit();

    }
    $req = explode("_",$_POST['req']);
    $className = $req[0] . "Controller" ;
    $methodName = $req[1];
    $file = "application/controllers/" . $className . ".php" ;
    require_once $file;
    if ($_POST['data']) {
        var_dump($_POST['data']);
    }
    $controller = new $className;
    $result = $controller->$methodName();
    echo json_encode($result);

我将参数作为$ _POST ['data']变量中的任何数组发送。我不知道将它们传递给(动态)$ methodName函数的最佳方法是什么。

1 个答案:

答案 0 :(得分:1)

我想您可以将$_POST['data']原样传递给动态方法。你可以拥有 动态方法接受数组但最初设置默认值,以便您可以轻松处理和 验证他们。例如:

class AController
{
  public function dynamicMethod($params)
  {
    // Set default values but allow them to be overridden by $params
    $locals = array_merge(array(
      'name' => 'John Doe',
      'address' => 'Nowhere',
    ), $params);

    // Do stuffs and return result. Example:
    return array('nameAndAddress' => $locals['name'] . ' lives at ' . $locals['address']);
  }
}

您还可以选择使用extract()转换 上面的nameaddress是真实的局部变量。

在你的ajax句柄中:

$controller = new $className;
$result = $controller->$methodName($_POST['data']);
echo json_encode($result);

所有这些都说,请注意@Sven所说的是正确的。有一些安全措施 当前方法中的问题。