我将所有调用传递给主映射功能
然后它应该基于字符串动态调用其他函数(直到这部分,事情很简单)
问题是我想将参数传递给第二个函数,并且这些参数可能会有所不同。
给出以下内容(不应更改):

function test1($x){
     echo $x;
}

function test2($x, $y){
     echo $x * $y;
}

现在有了映射功能
function mapping ($str){
      switch ($str){
          case 'name1':
              $fn_name = 'test1';
              $var = 5;
              break;
          case 'name2':
              $fn_name = 'test2';
              $var = 5;
              break;
      }
      $this->{$fn_name}($var);
}

然后,这将运行映射:
$this->mapping('name1');
$this->mapping('name2');   // This one will crash as it need two variables

当然,以上内容已简化为专注于问题而非代码的目的。
问题是当函数具有多个参数时(很容易发生)。
我期望有开关案例,并根据案例参数的填充方式,该行
$this->{$fn_name}($var); 应该可以。

知道不能更改功能(test1,test2)的结构,请给我建议或给我个建议。我不能突然开始使用func_get_args()func_get_arg()

最佳答案

您可以使用ReflectionFunction及其 invokeArgs() 方法在数组中传递变量:

function mapping ($str) {
    switch ($str) {
        case 'name1':
            $fn_name = 'test1';
            $fn_args = array(5);
            break;
        case 'name2':
            $fn_name = 'test2';
            $fn_args = array(5, 10);
            break;
    }

    $function = new ReflectionFunction($fn_name);
    $function->invokeArgs($fn_args);
}

关于php - 动态函数参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4061041/

10-12 12:46
查看更多