私が使用PHP
しているのはcall_user_func_array
、動的呼び出しを行う関数です。対応する引数を使用して関数名の配列を作成し、ループで実行します。例えば:
$methods = [
[ 'myfunction1', [$arg1, $arg2] ],
[ 'myfunction2', [$arg3, $arg4] ],
];
foreach ($methods as $method) {
call_user_func_array($method[0],$method[1]);
}
これは正常に機能しますが、私が直面している問題は、$methods
配列を定義する時点で、いくつかの引数がまだ定義されていないことです (たとえば$arg1
、$arg4
持っている、$arg2
持っ$arg3
ていない)。呼ばれた。
したがって、その引数の値を見つける場所を関数に伝える方法を探しています。これまでのところ、私が思いついたのは、変数を変数の名前を表す文字列に置き換えることです。
$methods = [
[ 'myfunction1', [$arg1, 'ARG2'] ],
[ 'myfunction2', ['ARG3', $arg4] ],
];
次に foreach ループで、各引数を確認し、それが文字列であるかどうかを確認し、その文字列が変数と一致するかどうかを確認します。文字列をその変数の値に置き換えます。
foreach ($methods as $method) {
foreach ($method[1] as $k => $arg) {
if (is_string($arg)) {
$name = strtolower($arg);
if (isset(${$name})) {
$method[1][$k] = ${$name};
}
}
}
call_user_func_array($method[0], $method[1]);
}
PHP
これは機能しますが、コードを改善するのに役立つ可能性があるため、 で使用されている他の既知のアプローチがあるかどうか疑問に思っています。
定義時にいくつかの引数が設定されていない動的呼び出しを定義できる他の方法を知っていますか?