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

时间:2011-06-04 13:31:15

标签: php function dynamic

我想通过使用此字符串动态运行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);

但没有帮助..

任何想法? 感谢

6 个答案:

答案 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'"),这不是您要找的。

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

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