Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用函数名和参数作为变量调用适当的函数?PHP_Php_Mysql_Function_Oop_Parameter Passing - Fatal编程技术网

如何使用函数名和参数作为变量调用适当的函数?PHP

如何使用函数名和参数作为变量调用适当的函数?PHP,php,mysql,function,oop,parameter-passing,Php,Mysql,Function,Oop,Parameter Passing,我想根据参数和表名发出ajax请求,获取数据以在不同的表上执行连接操作 $.ajax({ url: '/my/site', data: {fun_name: 'join_user_and_state', param: '12,1' }, type: 'post', success: function(output) { alert(output); } }); 在服

我想根据参数和表名发出ajax请求,获取数据以在不同的表上执行连接操作

$.ajax({ url: '/my/site',
     data: {fun_name: 'join_user_and_state',
            param: '12,1'
      },
     type: 'post',
     success: function(output) {
                  alert(output);
              }
});
在服务器端,应读取action POST参数和函数名,相应的值应指向要调用的方法,例如:

if(!empty($_POST['param']) && !empty($_POST['fun_name'])) {
   $param= $_POST['param'];  $fun_name= $_POST['fun_name'];
 // want to call proper function name with parametters from $fun_name and $param
 // parameters could be 2 or 3 or more its depends upon user choice
 // how to call
}

//definitions
join_user_and_state($user_id,$state_id)
 {
  // will do join query here with 2 tables
 }

join_user_and_city($user_id,$city_id)
 {
  // will do join query here with 2 tables
 }

join_user_and_state_and_city($user_id,$state_id,$city_id)
 {
  // will do join query here with 3 tables
 }
如何调用适当的函数

或者有其他方法可以实现同样的效果,我必须根据用户的选择执行不同的加入查询,如用户所在州、用户所在城市、用户受教育程度、用户工资等(所有这些都是可能的)?这些列在它们自己的表中

您可以使用call\u user\u func()

例如:

if(!empty($_POST['param']) && !empty($_POST['fun_name'])) {
  $param= $_POST['param'];  $fun_name= $_POST['fun_name'];
  $returnval = call_user_func($fun_name, explode(",", $param));
  //handle return variable etc....
}

这种方法是快速的还是使用if-else给我快速的结果?@amitgupta这很简单,因为它只有一行。如果以后添加更多函数,这将是一种更好的方法,就像If-else一样,如果函数越多,则需要越来越多的If语句。好的,谢谢,这是一种处理diff-join操作的好方法,意味着每个连接都有不同的函数,还是我应该只进行一个查询,并在同一个查询上传递所有变量?请参阅我问题的最后3-4行。是否有其他方法可以达到同样的效果?@amitgupta您可以只调用一个函数,该函数根据要使用的表和参数的给定配置构建SQL查询。