我想通过使用此字符串动态运行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);
但没有帮助..
任何想法? 感谢
答案 0 :(得分:5)
我认为这就是你所追求的:
$exe = "do_lightbox";
$pars = array('image1.jpg', 'picture 1');
$rc = call_user_func_array($exe, $pars);
答案 1 :(得分:2)
$ pars必须是包含参数的数组。应该是:array('image1.jpg', 'picture 1')
但是使用您的方法,它是:array("'image1.jpg'", " 'picture 1'")
,这不是您要找的。 p>
答案 2 :(得分:2)
这是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);
答案 3 :(得分:1)
最好使用call_user_func_array
,它允许您像数组一样传递参数:
call_user_func_array($exe, $pars);
或者您可以使用eval
直接解析字符串(但我不建议这样做):
eval("do_lightbox('image1.jpg', 'picture 1')");
哪个会执行你的功能。
答案 4 :(得分:1)
尽管强烈建议您不要使用eval功能:
eval("do_lightbox('image1.jpg', 'picture 1')")
答案 5 :(得分:1)
虽然我想知道你为什么需要这样的功能(安全问题),但这是一个解决方案:
$exe = "do_lightbox";
$pars = "'image1.jpg', 'picture 1'";
call_user_func_array($exe, explode(',', $pars));
您可能还想删除图像文件名周围的单引号和空格。