__调用magic在PHP中创建新类

__调用magic在PHP中创建新类,php,class,constructor,call,Php,Class,Constructor,Call,我在我的一些mvc代码中使用了_调用魔法来生成一个可自动加载的表单框架,但是我遇到了一个问题,我希望这里的一些人可以解决这个问题 __调用magic有两个参数:$methodName和$arguments。这些参数作为您调用的参数数组返回。通常,此函数是在您可以这样做的方法上调用的,因此将这些参数输入到函数中: call_user_func_array($methodName, $arguments); 这将用参数来表示方法签名。我正在尝试做一些更复杂的事情。我试图以同样的方式传播一个类构造函

我在我的一些mvc代码中使用了_调用魔法来生成一个可自动加载的表单框架,但是我遇到了一个问题,我希望这里的一些人可以解决这个问题

__调用magic有两个参数:$methodName和$arguments。这些参数作为您调用的参数数组返回。通常,此函数是在您可以这样做的方法上调用的,因此将这些参数输入到函数中:

call_user_func_array($methodName, $arguments);
这将用参数来表示方法签名。我正在尝试做一些更复杂的事情。我试图以同样的方式传播一个类构造函数,通过向类构造函数发送可能是一个内爆的逗号定义的参数数组,或者直接发送参数,但这两种方法都不能产生所需的结果。当我发送一个内爆数组到构造函数中时,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()函数来实现这一点,但我真的希望能够像使用函数一样实现这一点


提前感谢,

我在网上看到了以下内容:

 call_user_func_array(array($obj, '__construct'), $args);

使用PHP的反射类:()

$obj=新的ReflectionClass($classname)

然后

$ins=$obj->newInstanceArgs($arguments)


$ins=$obj->newInstance()

可能重复使用反射。是的,这可能会起作用,我会尝试一下,看看是否有效。谢谢:)这个函数的速度是多少?我知道反射可能会非常慢?@Sammaye在你的应用程序中对其进行基准测试,如果你认为它会显著慢下来,因为我得到了一个测试,我看到了这一点,这表明只要我小心,并且只在请求/调度中使用它,我就应该可以了,因为_调用是一个调度程序,我不应该真的感到紧张,唯一的是它会每次我创建一个新的表单元素时发送。我将运行一个基准测试,看看会发生什么。@Sammaye很有可能,没有反射代码的调用也不是很快。神奇的方法也伴随着减速而来。最大的问题是这有关系吗?如果我已经在使用一个_callno…只要我不需要制作一个真正巨大的表单…但是PHP可以在正确的服务器上处理很多事情,所以它可能非常好,我可能只是对什么都不感兴趣。有人能解释为什么这被标记下来,因为据我所知,这不仅仅是与反射的速度相同(如果不是快一点的话),并且似乎没有任何真正的安全副作用。有人能告诉我为什么这被降低了吗?@Sammaye不是我投了反对票,但我会说这是dv'ed,因为它不起作用。在现有实例上调用
\u construct
是毫无意义的,提供类名而不是
$obj
将产生警告,并且不会产生实例。如果你想
call\u user\u func\u array
给类一个静态工厂方法并调用它。是的,这可能很好,我需要在两者之间进行基准测试。我认为
$obj
是该类的名称。PHP通常像这样处理类成员的调用。示例:
usort($someArray,array('SomeClass','someStaticSortFunc'))