【问题标题】:how to call appropriate function using function name and parameters as variables ? PHP如何使用函数名和参数作为变量调用适当的函数? PHP
【发布时间】:2015-11-22 22:21:01
【问题描述】:

我想发出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
 }

如何调用合适的函数?

或者有任何其他方法可以达到相同的效果,我必须执行不同的不同连接查询取决于用户选择,如 user_state、user_city、user_education、user_salary..etc(以及这些的所有组合也是可能的) ?并且这些列存在于它们自己的表中

【问题讨论】:

    标签: php mysql function oop parameter-passing


    【解决方案1】:

    你可以使用 call_user_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 语句一样,您拥有的函数越多。
    • 好的,谢谢,这是处理差异连接操作的好方法,意味着每个连接都有不同的功能,或者我应该只进行一个查询并在同一个查询中传递所有变量?请参阅我的问题的最后 3 4 行。
    • 还有其他方法可以达到同样的效果吗?
    • @amitgupta 您可以只调用一个函数,该函数根据要使用的表和参数的给定配置构建 SQL 查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2014-05-04
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    相关资源
    最近更新 更多