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

时间:2010-04-14 18:58:46

标签: php constructor callback

我有一个函数,它接受可变参数,我从func_get_args()获得。

此函数需要使用这些参数调用构造函数。但是,我不知道该怎么做。

使用call_user_func,您可以使用参数数组调用函数,但是如何从中调用构造函数?我不能只是将参数数组传递给它;它必须相信我称之为“正常”。

谢谢!

2 个答案:

答案 0 :(得分:20)

对于PHP< 5.3如果没有首先使用call_user_func_array创建类的实例,则不容易实现。但是对于Reflection,这非常简单:

$reflection = new ReflectionClass( 'yourClassName' );
$instance = $reflection->newInstanceArgs( $yourArrayOfConstructorArguments );

答案 1 :(得分:-2)

如果由于某种原因你不能使用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无法接受的。