js
var a = 'sun';
var b = 'earth';
var fn = 'some_fn';
$.post('index-pro.php', {fn, a, b}, function(data){
console.log(data);
});
我有很多类似上面的代码部分,使用不同的变量,但是始终将index-pro.php
当作目标文件。
index-pro.php
if(isset($_POST)){extract($_POST);}
if(isset($fn) && $fn == 'some_fn'){some_fn($a, $b);}
elseif(isset($fn) && $fn == 'another_fn'){another_fn($another_vars);}
elseif(isset($fn) && $fn == 'another_fn'){another_fn($another_vars);}
我该怎么说:
无论设置了fn
->使用其变量运行此fn
。
答案 0 :(得分:1)
这就是您所需要的。简单的想法:为数组提供函数名称的参数:http://php.net/manual/de/function.call-user-func.php
我没有尝试过,但这应该可行:
JS
$functionName = $_POST['function'];
$args = $_POST['args'];
call_user_func ($functionName,$args)
PHP
"123"
答案 1 :(得分:1)
您不仅可以使用函数名称来调用函数,甚至可以使用存储函数名称的变量来调用函数:
$fn = 'doStuff';
$a = 2;
$fn($a);
function doStuff($arg) {
echo $arg;
}
如果您对不同函数使用的参数不同,那么我建议将数据发布为两个项目:funcName
和funcArguments
,例如:
$.post('index-pro.php', {funcName: fn, funcArguments: [a, b]}, function(data){
console.log(data);
});
在服务器端,您可以执行以下操作(我跳过检查和其他操作,只是基线):
$fn = $_POST['funcName'];
$arguments = $_POST['funcArguments'];
// with php5.6/php7 you have variadic `...` syntax
$fn(...$arguments);
// or use plain old `call_user_func_array`:
call_user_func_array($fn, $arguments);