如何使用call_user_func()而不是eval()?

时间:2014-06-01 03:58:43

标签: php eval

我需要从$_GET['url']变量自动获取参数。所以我想我会使用eval()函数来创建它。

当我听说它是​​多么安全时,我开始寻找另一个解决方案,我找到了一个名为call_user_func()的功能,但我真的不知道如何使用它。

这是正确运行的代码,但我不想再使用它了。你能告诉我如何使它与call_user_func()一起使用吗?

$execute = '$controller->' . "$url[1](";

for($i=2; $i<count($url); $i++){
    $execute .= "'" . $url[$i] . "'";
    if($i<count($url)-1){
        $execute .= ", ";
    }
}

$execute .= ');';
eval($execute);

1 个答案:

答案 0 :(得分:0)

您可能希望改为使用call_user_func_array

if (method_exists($controller, $url[1])) {
    call_user_func_array(array($controller, $url[1]), array_splice($url, -2));    
}

基本检查方法是否存在,如果是,则使用参数列表调用它。这基本上就是这样做的:

$controller->{$url[1]}($url[2], $url[3], $url[4], ..);
如果您没有要调用的参数,或者您要调用的参数位于1个数组变量中,

call_user_func是理想的,例如function test (array $arguments)