call_user_func_array パラメータの受け渡し問題
<?php<br />function a() {<br /> $p['asdf'] = '123';<br /> $p['dfd'] = 234;<br /> $p['hj3'] = 'fdg';<br /> call_user_func_array('b', $p);<br />}<br /><br />function b($p) {<br /> $p2 = func_get_args();<br /> var_dump($p2);<br /> var_dump($p);<br />}<br /><br />a();<br />?>
ログイン後にコピー
は次の 2 行を出力します。 ) [2]=> string(3) "fdg" }
string(3) "123"
$p が出力されるときに配列全体ではなく、string(3) だけが出力されるのはなぜですか「123」?マニュアルには次のように書かれていると思います:
mixed call_user_func_array (callable $callback, array $param_arr)
param_arr: インデックス付き配列としてコールバックに渡されるパラメータ
つまり、連想配列。配列が渡されます。
-----解決策--------------------------------
コードの場合
call_user_func_array('b', $p);
実際の実行は
b('123', 123, 'fdg')
つまり 3 つのパラメーターです関数 b
に渡され、関数 b($p) は仮パラメータ $p
を 1 つだけ宣言するため、関数 var_dump($p);//123
で直接アクセスできます。