Получить конструктор класса - PullRequest
1 голос
/ 31 июля 2010

как получить имя функции конструктора класса без создания экземпляра класса?

пример:

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

$args = array();
$object = call_user_func_array(array($class,$constructor),$args);

мне нужно создать объект, передав в него неопределенное количество переменныхконструктор.

Ответы [ 2 ]

6 голосов
/ 31 июля 2010

Вы можете сделать это с помощью Отражение :

<?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)
;
0 голосов
/ 31 июля 2010

Имя функции конструктора в PHP всегда __construct, так что вы уже сделали это, не делая ничего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...