传递参数时PHP Altorouter中出现意外行为

时间:2016-02-08 15:01:22

标签: php arrays php-closures altorouter

设置

我正在访问此网址:<host>/render/z63034/RBLR/GLZB

我的网址格式如下:/render/[a:title]/[a:bpFrom]/[a:bpTo]

我的路线如此添加:

$router->map("GET", "/render/[a:title]/[a:bpFrom]/[a:bpTo]", function ($params) { include __DIR__ . "/views/render.php"; }, "render");

然后这个电话看起来像这样:

call_user_func_array($match['target'], $match['params']);

在我的index.php(所有请求都被路由到的地方)var_dump() $match['params']产生预期结果:

array(3) {
  ["title"]=>
  string(6) "z63034"
  ["bpFrom"]=>
  string(4) "RBLR"
  ["bpTo"]=>
  string(4) "GLZB"
}

在我的render.php(包含在内)中var_dump() $params会产生意外

string(6) "z63034"

问题

为什么只有我传递给call_user_func_array的数组中的第一个元素实际传递(不是作为数组,而是作为值本身)?

1 个答案:

答案 0 :(得分:1)

请注意call_user_func_array$params作为单个参数传递,我的意思是,在函数定义中,您必须声明与$params数组一样多的参数。

例如,如果你这样称呼:

$params = array('Hello', 'World');
call_user_func_array(array($this,'test'), $params);

你的功能定义看起来像那样

 function test($a){
        echo $a; 
        echo $b; 
        echo '<br>';
    }

你只会打印'你好',所以你必须声明你的功能

function test($a, $b){
        echo $a; 
        echo $b; 
        echo '<br>';
    }

希望有所帮助

相关问题