передача параметров конструктору класса

Effector

Новичок
передача параметров конструктору класса

Есть функция в которую передается переменное количество параметров. Необходимо создать в ней экземпляр класса и передать конструктору эти параметры.

PHP:
class a {
   __construct ($a1,$a2,$a3) {

......

}
}

function b()
{
   $Class=func_get_arg(0); //Первым аргументом идет имя класса
   $Param=func_get_args(); //Получаем все аргументы
   unset($Param[0]); //Удаляем первый элемент, в котором было указано имя класса
   $Param=array_values($Param) //Убираем пропуски в индексах
   $c=new $Class()  //Вот-тут я не знаю как передать параметры из $Param
   return $c;
}

$Obj=b('a',1,2,3)
Можно конечно сделать класс без конструктора, и потом после создания объекта вызвать метод при помощи call_user_func_array(), но может можно как-нибудь с конструктором?
 

Effector

Новичок
просто я заранее не знаю какой класс буду вызывать и с какими параметрами
 

Effector

Новичок
Ладно, сейчас опишу реальную проблему, а не абстрактную задачу.

У меня есть класс kernel в котором есть метод LoadLibrary().
Этот метод создает экземпляр другого класса и добавляет к атрибуту lib класса kernel.
Мне нужно чтобы этот метод принимал первым параметром имя класса, который необходимо загрузить, и параметры, которые нужно передать конструктору при создании. Конечно можно было бы передавать параметры ввиде массива, но так не очень удобно, поэтому приходится использоваться метод с переменным количеством параметров.

Класс kernel и его использование:
PHP:
class kernel {
	
	var $lib=array();

	//Регистрирует и инициализирует модуль
	function LoadLibrary() {
		$Name=func_get_arg(0);
		$Param=func_get_args();
		unset($Param[0]);
		$Param=array_values($Param);
		if($Param)
			$this->lib[$Name]=new $Name; // Вот сюда нужно передать параметры
		else
			$this->lib[$Name]=new $Name;
		return true;
	}
} 

$kernel=new kernel();
$kernel->LoadLibrary('MySQLDB','host','user','pass');  //Загружаю модуль 
//Теперь другие модули смогут использовать соединение с базой данных при помощи обращения к $kernel->lib['MySQLDB']
//.......... и так далее  .................//
Вот как передать параметры я не пойму.
 

hermit_refined

Отшельник
если не менять структуру, то хоть так:
PHP:
class Kernel {
// ...
    public function registerLibrary($library) {
            $this->lib[get_class($library)]= $library;
    }
} 
// ...
$kernel->registerLibrary(new MySQLDB('host', 'user', 'pass'));
 

Effector

Новичок
то есть просто в функции создать объект не получится? чтобы не передавать объект....

Ну тогда прийдется делать так, или передавать параметры массивом.

может быть возможно как-нибудь создать объект, чтобы не вызывался конструктор класса.
Тогда можно будет вызвать конструктор через call_user_func_array()
 

Effector

Новичок
то есть лучше будет загружать модуль при помощи
PHP:
$kernel->registerLibrary(new MySQLDB('host', 'user', 'pass'));
чем передавать параметры массивом, и в классе MySQLDB разбирать этот массив?
 

hermit_refined

Отшельник
да передавать сами аргументы вы можете как угодно.
хоть одной строкой - "mysql://user:pass@host/dbname".
нет необходимости передавать имя класса (+ аргументы) вместо нормального объекта.
 
Сверху