获取类构造函数

Tim*_*nen 1 php constructor

如何在不实例化类的情况下获取类构造函数的名称?

例:

$class = 'someClass';
$constructor = somehow get constructor;

$args = array();
$object = call_user_func_array(array($class,$constructor),$args);
Run Code Online (Sandbox Code Playgroud)

我需要的是通过将不确定数量的变量传递给它的构造函数来创建一个对象.

Sha*_*obe 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);
Run Code Online (Sandbox Code Playgroud)

如果您的构造函数使用旧样式(除非您的代码使用了命名空间,并且您使用的是PHP 5.3.3,或者可能更大,因为旧式构造函数将不再使用命名空间代码 - 更多信息),这也将起作用:

<?php
class Pants {
    function Pants($a, $b, $c) { ... }
}
Run Code Online (Sandbox Code Playgroud)

如果类没有构造函数并且您希望使用反射,请使用$class->newInstance()而不是$class->newInstanceArgs(...).要动态执行此操作,它将如下所示:

$object = null === $class->getConstructor() 
    ? $class->newInstance()
    : $class->newInstanceArgs($args)
;
Run Code Online (Sandbox Code Playgroud)