从字符串调用 PHP 函数(带参数)


calling php function from string (with parameters)

我想使用以下字符串动态运行 php 函数:

do_lightbox('image1.jpg', 'picture 1')

我已经像这样解析了字符串:

$exe = "do_lightbox";
$pars = "'image1.jpg', 'picture 1'";

并尝试使用以下代码:

$rc = call_user_func($exe, $pars);

不幸的是,这给了我一个错误 - 我也尝试像拆分$pars一样

$pars = explode(',', $pars);

但没有帮助..

有什么想法吗?谢谢

我认为这就是你所追求的:

$exe = "do_lightbox";
$pars = array('image1.jpg', 'picture 1');
$rc = call_user_func_array($exe, $pars);

$pars必须是包含参数的数组。应该是 : array('image1.jpg', 'picture 1')但使用您的方法,它是 : array("'image1.jpg'", " 'picture 1'")这不是您要找的。

这是call_user_func()工作原理的示例:

function myfunc($p1,$p2){
    echo "first: $p1, second: $p2'n";
}
$a1="someval";
$a2="someotherval";
call_user_func("myfunc",$a1,$a2);

这里与前面的示例的不同之处在于,您不必在单个数组中传递每个参数。 此外,您可以解析分隔字符串的数组并执行相同的操作:

function myfunc($p1,$p2){
    echo "first: $p1, second: $p2'n";
}
$a="someval, someotherval";
$e=explode(", ",$a);
$a1=$e[0];
$a2=$e[1];
call_user_func("myfunc",$a1,$a2);

最好使用call_user_func_array它允许您像数组一样传递参数:

call_user_func_array($exe, $pars);

或者,您可以使用eval直接解析字符串(但我不建议这样做(:

eval("do_lightbox('image1.jpg', 'picture 1')");

这将执行您的函数。

虽然我想知道你为什么需要这样的功能(安全问题(,但这里有一个解决方案:

$exe = "do_lightbox";
$pars = "'image1.jpg', 'picture 1'";
call_user_func_array($exe, explode(',', $pars));

您可能还想摆脱图像文件名周围的单引号和空格。

尽管强烈建议不要使用eval函数:

eval("do_lightbox('image1.jpg', 'picture 1')")