arrays — Неожиданное поведение в PHP Altorouter при передаче параметров

Настроить

Я получаю доступ к этому 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() из $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

Решение

Заметить, что 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>';
}

надеюсь, это поможет

1

Другие решения

Других решений пока нет …