Создание объекта с переменным числом параметров

FireMaster

Guest
Создание объекта с переменным числом параметров

Есть следующая функция:
PHP:
function object_configuration()
{
  require_once(object.php');

  switch(func_num_args())
  {
    case 0:
      $configuration['var1'] = 'val1';
      $configuration['var2'] = 'val2';
      $configuration['var3'] = 'val3';
      $configuration['var4'] = 'val4';

      $object = new object($configuration['var1'], $configuration['var2'], $configuration['var3'], $configuration['var4']);
      break;

    case 1:
      object::error()->message('At least 2 parameters must be passed for the object.');
      break;

    case 2:
      $configuration['var1'] = func_get_arg(0);
      $configuration['var2'] = func_get_arg(1);

      $object = new object($configuration['var1'], $configuration['var2']);
      break;

    case 3:
      $configuration['var1'] = func_get_arg(0);
      $configuration['var2'] = func_get_arg(1);
      $configuration['var3'] = func_get_arg(2);

      $object = new object($configuration['var1'], $configuration['var2'], $configuration['var3']);
      break;

    case 4:
      $configuration['var1'] = func_get_arg(0);
      $configuration['var2'] = func_get_arg(1);
      $configuration['var3'] = func_get_arg(2);
      $configuration['var4'] = func_get_arg(3);

      $object = new object($configuration['var1'], $configuration['var2'], $configuration['var3'], $configuration['var4']);
      break;

    default:
      object::error()->message('Too many parameters has been passed, maximum amount is 4.');
  }

  return $object;
}
Суть кода в том, чтобы создать объект. Вопрос следующий: возможно ли сделать то, что делает код выше, но без свитча ? Знаю, что можно сделать через eval(), но это не вариант.
 

su1d

Старожил PHPClubа
PHP5 only:
PHP:
function object_configuration() {
  $params = func_get_args();
  return call_user_func_array(
    array(new ReflectionClass('object'), 'newInstance'),
    $params
  );
}
а вообще, вроде как не рекомендуют в РНР4 делать конструкторы классов с параметрами.
 

Screjet

Новичок
Неверное проектирование.
Объект должен сам решать сколько нужно ему аргументов и/или какие они должны быть по типам/значениям.

А если (подозреваю) есть несколько идентичных объектов, тогда они могут наследовать общий суперкласс.

зы. Разве 5-й научили разименовывать?
 
Сверху