PHP Altorouter 传递参数时的意外行为
Unexpected behaviour in PHP Altorouter when passing parameters
设置
我正在访问此 url:<host>/render/z63034/RBLR/GLZB
。
我的 url 模式是这样的:/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()
of $match['params']
产生了预期的结果:
array(3) {
["title"]=>
string(6) "z63034"
["bpFrom"]=>
string(4) "RBLR"
["bpTo"]=>
string(4) "GLZB"
}
在我的 render.php
(包含)中 $params
的 var_dump()
产生了意想不到的
string(6) "z63034"
问题
为什么我传递给 call_user_func_array
的数组中只有第一个元素实际传递了(不是作为数组,而是作为值本身)?
请注意 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>';
}
你只会打印'Hello',所以你必须这样声明你的函数
function test($a, $b){
echo $a;
echo $b;
echo '<br>';
}
希望对您有所帮助
设置
我正在访问此 url:<host>/render/z63034/RBLR/GLZB
。
我的 url 模式是这样的:/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()
of $match['params']
产生了预期的结果:
array(3) {
["title"]=>
string(6) "z63034"
["bpFrom"]=>
string(4) "RBLR"
["bpTo"]=>
string(4) "GLZB"
}
在我的 render.php
(包含)中 $params
的 var_dump()
产生了意想不到的
string(6) "z63034"
问题
为什么我传递给 call_user_func_array
的数组中只有第一个元素实际传递了(不是作为数组,而是作为值本身)?
请注意 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>';
}
你只会打印'Hello',所以你必须这样声明你的函数
function test($a, $b){
echo $a;
echo $b;
echo '<br>';
}
希望对您有所帮助