动态函数参数

bhe*_*fny 5 php

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

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

function test2($x, $y){
     echo $x * $y;
}
Run Code Online (Sandbox Code Playgroud)

现在是映射功能

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);
}
Run Code Online (Sandbox Code Playgroud)

然后这将运行映射:

$this->mapping('name1');
$this->mapping('name2');   // This one will crash as it need two variables
Run Code Online (Sandbox Code Playgroud)

当然,上述内容被简化为关注问题而不是代码的目的.问题是当函数有多个参数时(很容易发生).我期望有开关盒,并根据如何填充案例参数,该行 $this->{$fn_name}($var);应该工作.

知道函数(test1,test2)结构不能改变,你能告诉或给我一些想法吗?我不能突然开始使用func_get_args()func_get_arg()

Tat*_*nen 5

您可以使用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);
}
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考 - ReflectionFunction不适用于类方法 - 实例或静态 (2认同)