[英]Unexpected behaviour in PHP Altorouter when passing parameters
设定
我正在访问以下URL: <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']
的var_dump()
产生了预期的结果:
array(3) {
["title"]=>
string(6) "z63034"
["bpFrom"]=>
string(4) "RBLR"
["bpTo"]=>
string(4) "GLZB"
}
在我的render.php
(包括在内var_dump()
, $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>';
}
希望能有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.