3

可変数の引数を取る PHP 関数があります。

function foo() {
     $numargs = func_num_args(); 
     if ($numargs < 3) {
         die("expected number of args is 3, not " . $numargs);
     }  
...

私はこのようにそれを呼び出す場合:

   foo(1, 12, 17, 3, 5); 

それは問題ありませんが、次のように呼び出すと:

   $str = "1, 12, 17, 3, 5"; 
   foo($str); 

引数を 1 つだけ渡していると表示されるため、失敗します。関数自体を変更せず、呼び出し規約だけを変更したい場合は、どのような変更を加える必要がありますか。

-- 更新: 爆発呼び出しを保存するために、単純に配列を作成しました。また、この関数はメンバー関数であるため、呼び出し規約が少し異なります。したがって、コードは次のようになります

$list = array(); 
$list[] = 1;
$list[] = 12;
$list[] = 17;
// etc. 
call_user_func_array(array($this, 'foo'), $list);

これは他の誰かに役立つかもしれないと考えました。

4

2 に答える 2

4

これでうまくいくはずです:

$str = "1, 12, 17, 3, 5"; 
$params = explode(', ', $str );
call_user_func_array ( 'foo', $params );

call_user_func_array()関数を呼び出して、配列に格納されている引数を渡すことができます。したがって、インデックス 0 の配列項目が関数の最初のパラメーターになります。

http://www.php.net/manual/en/function.call-user-func-array.php

更新:$params引数を整数にしたい場合は、配列に対して追加の処理を行う必要があります (上記のスニペットを使用すると、引数は文字列として渡されます)。

于 2013-03-12T14:14:12.810 に答える
3
$str = "1, 12, 17, 3, 5"; 
call_user_func_array('foo',explode(',',$str));
于 2013-03-12T14:14:09.960 に答える