Вы можете сделать это с помощью Отражение :
<?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 или, предположительно, больше, поскольку конструкторы старого стиля больше не будут работать с кодом пространства имен - подробнее ):
<?php
class Pants {
function Pants($a, $b, $c) { ... }
}
Если в классе нет конструктора и вы хотите использовать отражение, используйте $class->newInstance()
вместо $class->newInstanceArgs(...)
. Чтобы сделать это динамически, это будет выглядеть так:
$object = null === $class->getConstructor()
? $class->newInstance()
: $class->newInstanceArgs($args)
;