我想使用以下字符串动态运行 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')")