передача нескольких элементов массива в класс

-=BlackSmoke=-

Профессор
Регистрация
4 Авг 2009
Сообщения
280
Реакции
49
Есть 2 стула одна функция, принимающая в числе прочих аргументов массив произвольной длины. И есть необходимость внутри этой функции вызвать класс, передав ему значения из массива как отдельные переменные.

Реализация вроде
PHP:
$test = new test(implode(',',$params));
не работает, т.к. implode возвращает строку. Возможно ли в принципе сделать такое?
 
можно. Нужно делать либо через переменную
PHP:
$params = array();
$params['two'] = 'value';
$params['one'] = 'value';
$test = new test( );
foreach($params as $id=>$param){
  $test->$id = $param;
}
Мы передаём в класс $test переменные под названием one и two .

Можно такое сделать в самом классе (это намного лучше если передавать такие масивы нужно больше чем в одном месте )

PHP:
$params = array();
$params['one'] = 'one';
class test{
     function setParams($params){
        foreach($params as $id=>$param){
             $this->$id = $param;
         }
    }
 
}

$test = new test( );
$test->setParams($params);
 
KillDead, спасибо за ответ. Первый способ явно не подходит, т.к. свойства могут быть приватными. Второй способ более годный, и практически универсален, заюзаю его. У меня сейчас реализовано через такой вот костыль:
PHP:
switch(sizeof($params)){
	case 1: $obj = new $class($params[0]); break;
	case 2: $obj = new $class($params[0],$params[1]); break;
	case 3: $obj = new $class($params[0],$params[1],$params[2]); break;
	case 4: $obj = new $class($params[0],$params[1],$params[2],$params[3]); break;
	case 5: $obj = new $class($params[0],$params[1],$params[2],$params[3],$params[4]); break;
	default: $obj = new $class($params);
}
В принципе работает, только кол-во аргументов жестко ограничено.
 
Назад
Сверху