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

Тема в разделе "Как сделать...", создана пользователем -=BlackSmoke=-, 18 сен 2011.

  1. -=BlackSmoke=-

    -=BlackSmoke=-

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

    Реализация вроде
    PHP:
    $test = new test(implode(',',$params));
    не работает, т.к. implode возвращает строку. Возможно ли в принципе сделать такое?
     
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    можно. Нужно делать либо через переменную
    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);
     
    -=BlackSmoke=- нравится это.
  3. -=BlackSmoke=-

    -=BlackSmoke=-

    Регистр.:
    4 авг 2009
    Сообщения:
    281
    Симпатии:
    49
    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);
    }
    В принципе работает, только кол-во аргументов жестко ограничено.