Динамическое присваивание имён переменных и инициализация их как объектов класса

Valentin

Новичок
Динамическое присваивание имён переменных и инициализация их как объектов класса

Привет всезнающий All :D !

Есть задача модульности системы. Модули подключаются в классе CProjectMod. Папка которая содержит модуль сопровождается конфигом на xml для этого модуля. Там описано название (имя класса) модуля, имя разработчика, имя файла модуля и т.д.

Нужно составить часть функции, которая динамически подключает модуль используя данные xml. Одна реализация у меня есть; теперь хочу сократить строки кода, вобщем написать более универсальную функцию :) суперкарлика.

PHP:
function obj_mod_create($mod_name)
{
/* Начало  */
$xml_mod_data = $this->open_xml_document($mod_name);
require_once("modules/$xml_mod_data->name/$xml_mod_data->file_name");
/* Дальше запара */
...
Дальше динамически объявляется переменная, которую хочу динамически инициализировать как объект класса (имя класса совпадает с именем файла модуля).

PHP:
${strtolower($xml_mod_data->name)} = new {ClassName типа $xml_mod_data->name}(&$db);
Вот... вопрос, как это реализовать, как для классов сделать что-то наподобие переменных - ${strtolower($xml_mod_data->name)}. :confused:

Уточню. результат кода должен быть примерно таким:

PHP:
$ctextmod = new ctextmod (&$db);
 

Profic

just Profic (PHP5 BetaTeam)
так же как и для функций
на знаю сработает ли new $obj->member, но new $variable работает на ура

также в php5 можо использовать reflection api - это даже красивее, а вообще поищи по форуму по теме "фабрика классов" и fabric, и этот, не помню как назвается, шаблон проектирования про фабрики

кстати может быть лучше вообще использовать singleton

это мысли для размышления :)
 

Valentin

Новичок
Автор оригинала: Profic
new $variable
???

Может я не совсем понял :), но имеется в виду что справедливо:

PHP:
${$var_name} = new ${$class_name}()
?
для данной ситуации $var_name = $class_name = "ctextmod"

Что-то не то :) ошибку даст. Повторюсь, что нужна конструкция типа... с левой частью нет проблем:

$ctextmod = new ctextmod();

Как для класса выполнить подстановку имени [ctextmod] :) самым простым методом.
 

Stadnitski Alex

Новичок
У меня например создаются экземпляты таким способом:
PHP:
 $this -> modules[$name] = new $name;
Если значение $this -> modules[$name] "some_module", а значение $name some_class, то приведенный выше код аналогичен
PHP:
 $some_module = new some_class;
 

Profic

just Profic (PHP5 BetaTeam)
Valentin
нет справедливо именно так как я написал
в моем примере $variable - это имя класса, а не имя переменной в которой лежит имя класса

и забудьте как страшный сон свои фигурные скобочки, используйте массивы и/или возвращайте созданный объект
 

Valentin

Новичок
Автор оригинала: Profic
Valentin
и забудьте как страшный сон свои фигурные скобочки
Вот поэтому и задаются вопросы, чтобы получить ещё + ко всему и дельный совет ;) !!!
Спасибо :)
 
Сверху