Как вызвать конструкцию ReflectionObject и как получить ее из ReflectionClass - PullRequest
0 голосов
/ 16 июля 2009

У меня есть массив mirrorClasses.

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

Суть в том, чтобы создать экземпляр объекта, не зная имени класса (я узнаю его во время выполнения).

Пример, просто чтобы представить идею:

foreach (Conf::get_array() as $reflection_class) {
     //it's not right, just to render the idea
     $reflectionObject = new ReflectionObject ($reflection_class); 
     $objects[] = $reflectionObject->construct($param_1, $param_2); 
}

Другой пример:

foreach (Conf::get_array() as $reflection_class) {
     $objects[] = new $reflection_class($param_1, $param_2); //not right. maybe from php 5.3?
}

1 Ответ

3 голосов
/ 16 июля 2009

Для этого вам не нужен экземпляр ReflectionObject. ReflectionClass имеет два метода

public stdclass newInstance(mixed args)
public stdclass newInstanceArgs(array args)

пример:

<?php
class Foo {
  public function __construct($a, $b) { echo "Foo($a,$b) "; }  
}
class Bar {
  public function __construct($a, $b)  { echo "Bar($a,$b) "; }  
}

class Conf {
  public static function get_array() {
    return array(new ReflectionClass('Foo'), new ReflectionClass('Bar'));
  }
}



$args = array('A', 'B');
$object = array();
foreach (Conf::get_array() as $reflection_class) {
  $objects[] = $reflection_class->newInstanceArgs($args);
}

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