我有一个函数,它接受可变参数,我从func_get_args()
获得。
此函数需要使用这些参数调用构造函数。但是,我不知道该怎么做。
使用call_user_func
,您可以使用参数数组调用函数,但是如何从中调用构造函数?我不能只是将参数数组传递给它;它必须相信我称之为“正常”。
谢谢!
答案 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
无法接受的。