8

連想配列を使用して関数を呼び出してパラメーターを宣言する方法があるかどうか知りたいです。

たとえば、この関数がある場合:

function test($hello, $world) {
    echo $hello . $world;
}

このようなことを呼び出す方法はありますか?

call('test', array('hello' => 'First value', 'world' => 'Second value'));

私はcall_user_funcandcall_user_func_arrayの使用に慣れていますが、事前にどのパラメーターを探しているのかわからない場合に、さまざまなメソッドを呼び出すために使用できる、より一般的なものを探しています。

編集: これは、API フロント エンド用の単一のインターフェイスを作成するためです。JSON を受け入れ、それを配列に変換しています。したがって、さまざまなメソッドを呼び出して、JSON 入力の値をメソッドに渡したいと思います。このインターフェイスからさまざまなメソッドの組み合わせを呼び出せるようにしたいので、必要な順序を知らなくてもパラメーターを関数に渡す方法が必要です。リフレクションを使用すると結果が得られると考えています。探しています。

4

4 に答える 4

4

PHP 5.4以降では、これは機能します

function test($assocArr){
  foreach( $assocArr as $key=>$value ){
    echo $key . ' ' . $value . ' ';
  }
}

test(['hello'=>'world', 'lorem'=>'ipsum']);
于 2015-08-04T15:32:20.203 に答える
3

call_user_func_arrayの php マニュアルを確認してください

また、トークン演算子 (...) を検索します。これは、PHP の関数で可変引数を使用する方法です。次のように宣言できます: -

function func( ...$params)
{
    echo $params[0] . ',' . parama[1];
}
于 2013-03-30T16:21:01.440 に答える
2

関数func_get_args()で内部的にこの関数を使用できます。

したがって、次のように使用できます。

function test() {
     $arg_list = func_get_args();
     echo $arg_list[0].' '.$arg_list[1]; 
}

test('hello', 'world');
于 2013-03-30T16:21:41.297 に答える
1

以下はうまくいくはずです...

function test($hello, $world) {
  echo $hello . $world;
}

$callback = 'test'; <-- lambdas also work here, BTW

$parameters = array('hello' => 'First value', 'world' => 'Second value');

$reflection = new ReflectionFunction($callback);
$new_parameters = array();

foreach ($reflection->getParameters() as $parameter) {
  $new_parameters[] = $parameters[$parameter->name];
}

$parameters = $new_parameters;

call_user_func_array($callback, $parameters);
于 2017-01-07T23:02:09.417 に答える