我在我的一些mvc代码中使用了__call魔法来生成一个可自动加载的表单框架,但我遇到了一个问题,我希望这里的某个人可能有一个解决方法。
__call magic需要两个参数:$ methodName和$ arguments。这些论点以你所称的args数组的形式返回。通常,这个函数会在您可以这样做的方法上调用,因此请将这些参数提供给函数:
call_user_func_array($methodName, $arguments);
这将使用参数传播方法签名。我想做一些更复杂的事情。我试图以相同的方式传播一个类构造函数,通过能够将一个内爆的逗号deliminenated参数数组发送到类构造函数中或直接发送args但这两个都不会产生所需的结果。当我将一个内爆阵列发送到构造函数中时,PHP认为它是一个字符串,当我发送数组时,它认为它是一个数组。
这是我使用atm的代码:
public function __call($method, $args){
return $this->init_element(new $method($args['name'], $args['value'], $args['opts']));
}
如果我有4个参数可以传递下去怎么办?有没有办法可以让它动态填充构造函数,就像使用call_user_func_array()函数一样?
我可以使用一个attributes()函数来执行此操作,但我真的希望能够像我可以使用函数一样。
提前致谢,
答案 0 :(得分:0)
使用PHP的反射类:(http://php.net/manual/en/class.reflectionclass.php)
$obj = new ReflectionClass( $classname );
然后
$ins = $obj->newInstanceArgs( $arguments );
或
$ins = $obj->newInstance( );
答案 1 :(得分:-1)
我在网络上看到以下内容:
call_user_func_array(array($obj, '__construct'), $args);