如何在不实例化类的情况下获取类构造函数的名称?
示例:
$class = 'someClass';
$constructor = somehow get constructor;
$args = array();
$object = call_user_func_array(array($class,$constructor),$args);
我需要的是通过将不确定数量的变量传递给它的构造函数来创建一个对象。
答案 0 :(得分:6)
您可以使用Reflection执行此操作:
<?php
class Pants
{
public function __construct($a, $b, $c)
{
$this->a = $a;
$this->b = $b;
$this->c = $c;
}
}
$className = 'pants';
$class = new ReflectionClass($className);
$obj = $class->newInstanceArgs(array(1, 2, 3));
var_dump($obj);
如果您的构造函数使用旧样式(除非您的代码使用了命名空间,并且您使用的是PHP 5.3.3,或者可能更大,因为旧式构造函数将不再使用命名空间代码 - { {3}}):
<?php
class Pants {
function Pants($a, $b, $c) { ... }
}
如果该类没有构造函数且您希望使用反射,请使用$class->newInstance()
而不是$class->newInstanceArgs(...)
。要动态执行此操作,它将如下所示:
$object = null === $class->getConstructor()
? $class->newInstance()
: $class->newInstanceArgs($args)
;
答案 1 :(得分:0)
PHP中构造函数的函数名称始终为__construct
,因此您无需执行任何操作即可使用它。