代码之家  ›  专栏  ›  技术社区  ›  Timo Huovinen

获取类构造函数

  •  1
  • Timo Huovinen  · 技术社区  · 14 年前

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

    例子:

    $class = 'someClass';
    $constructor = somehow get constructor;
    
    $args = array();
    $object = call_user_func_array(array($class,$constructor),$args);
    

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

    2 回复  |  直到 14 年前
        1
  •  6
  •   Shabbyrobe    14 年前

    你可以这样做 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);
    

    如果您的构造函数使用旧样式(除非您的代码使用名称空间,并且您使用的是PHP5.3.3或更高版本,因为旧样式的构造函数将不再使用名称空间的代码),那么这种方法也会起作用- more info

    <?php
    class Pants {
        function Pants($a, $b, $c) { ... }
    }
    

    如果类没有构造函数,并且希望使用反射,请使用 $class->newInstance() 而不是 $class->newInstanceArgs(...)

    $object = null === $class->getConstructor() 
        ? $class->newInstance()
        : $class->newInstanceArgs($args)
    ;
    
        2
  •  0
  •   Krevan    14 年前

    PHP中构造函数的函数名总是 __construct