代码之家  ›  专栏  ›  技术社区  ›  zneak

用PHP从变量参数调用构造函数

  •  12
  • zneak  · 技术社区  · 16 年前

    我有一个接受变量参数的函数,我从 func_get_args() .

    call_user_func ,可以使用参数数组调用函数,但如何从中调用构造函数?我不能把一系列的参数传递给它;它一定相信我叫它“正常”。

    2 回复  |  直到 16 年前
        1
  •  20
  •   Decent Dabbler    16 年前

    对于PHP<5.3如果不先创建一个具有 call_user_func_array Reflection 这是非常琐碎的:

    $reflection = new ReflectionClass( 'yourClassName' );
    $instance = $reflection->newInstanceArgs( $yourArrayOfConstructorArguments );
    
        2
  •  -2
  •   DUzun    12 年前

    ReflectionClass::newInstanceArgs 下面是使用eval()的另一个解决方案:

    function make_instance($class, $args) {
       $arglist = array();
       $i = 0; 
       foreach($args => &$v) {
           $arglist[] = $n = '_arg_'.$i++;
           $$n = &$v;
       }
       $arglist = '$'.implode(',$',$arglist);
       eval("\$obj = new $class($arglist);");
       return $obj;
    }
    $instance = make_instance('yourClassName', $yourArrayOfConstructorArguments);
    

    请注意,使用此函数可以通过引用将参数传递给构造函数,这是不可接受的 ReflectionClass::newInstanceArgs .