我正在使用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
,因为它可能会帮助我改进我的代码。
您是否知道我可以定义动态调用的任何其他方式,其中一些参数在定义时未设置?