1

設定

この 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実際に渡されるのはなぜですか (配列としてではなく、値自体として)。

4

1 に答える 1

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>';
    }

それが役立つことを願っています

于 2016-02-08T16:09:14.973 に答える