使用变量运行函数的更短方法

时间:2018-12-01 09:27:59

标签: php jquery

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

2 个答案:

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

如果您对不同函数使用的参数不同,那么我建议将数据发布为两个项目:funcNamefuncArguments,例如:

$.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);