__call magic在PHP中创建新类

时间:2010-09-07 11:32:10

标签: php class constructor call

我在我的一些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()函数来执行此操作,但我真的希望能够像我可以使用函数一样。

提前致谢,

2 个答案:

答案 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);