как инстанцировать класс с неизвестным числом аргументов?

Духовность™

Продвинутый новичок
как инстанцировать класс с неизвестным числом аргументов?

сабж.
имеется класс, который необходимо инстанцировать, но кол-во аргументов не известно.

такое возможно вообще реализовать?
 

Духовность™

Продвинутый новичок
Mr_Max
гы причем тут array?

Нужна, грубо говоря, функция, возвращающая объект:
PHP:
 object getInstance(string $className [, mixed $params])
но количество $params не известно. Просто нужно автоматически инстанцировать класс, по аналоги с call_user_func()
 

Angerslave

Новичок
Покопай в сторону func_num_args, func_get_args и func_get_arg. Думаю, можно функцию объявить вообще без входящих параметров, а нужные комбинации оных проверять вышеозначенными функциями.
 

Духовность™

Продвинутый новичок
Вопрос решился. Решение нашел там же, где и брал идеи проектирования.

Данная задача решается так:

PHP:
$args = func_get_args();
$class = array_shift($args);

if ($args)
{
    $reflect = new ReflectionClass($class);
    return $reflect->newInstanceArgs($args);
}
жаль по Reflection перевода нет (
 

kruglov

Новичок
Что-то мне все больше нравится не
xxx(param1, [param2, [param3]]...)
а
xxx(array('param2'=>'111', 'param1'=>'222'))

По крайней мере для количества аргументов больше некоторого запоминаемого количества. Не надо пальцем аргументы считать.

p.s. А то начинаются разные imagejpeg($i, null,90) и походы в ман по вопросу, как же у данной функции расположены аргументы "где ищем" и "что".
 

est-in

Новичок
Конечно Array. Меньше телодвижений будет :)

P.S. to kruglov в питоне можно и так делать func(param2=value, param1=value)
 

crocodile2u

http://vbolshov.org.ru
kruglov
А не надо делать кол-во аргументов "больше некоторого запоминаемого количества" :)
 

zerkms

TDD infected
Команда форума
kruglov
т.е. порядок аргументов "ты" запомнить не в состоянии, а имена - легко. абсурд.
 

kode

never knows best
kruglov

для тех кто не в состоянии запомнить придумали PHPDoc

-~{}~ 06.08.08 13:03:

Автор оригинала: флоппик
а что именно в этой фразе - абсурд?
вероятно смысл в том что имена параметров запомнить сложнее чем их порядок
 

флоппик

promotor fidei
Команда форума
Партнер клуба
kode, аргументы где?
Ты что быстрее запомнишь, аську, или мыло?

Другое дело, что ошибиться при написании названий проще на порядок...
 

kode

never knows best
Автор оригинала: флоппик
kode, аргументы где?
Ты что быстрее запомнишь, аську, или мыло?

Другое дело, что ошибиться при написании названий проще на порядок...
номер аськи ты уже мимоходом превратил в порядок следования?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Порядок следования еще сложней. Ибо нужно держать в памяти пару «смысл параметра => номер позиции»
 

Angerslave

Новичок
т.е. порядок аргументов "ты" запомнить не в состоянии, а имена - легко. абсурд.
Имхо, чистейшая логика и личный опыт. Я в некоторых стандартных функциях(в основном строковых и массивов) в двух(!) параметрах путаюсь что идёт первым - массив/строка вся или что ищем, а тут если ещё больше делать... Не, дать параметрам короткие, но ясные имена(а не useMySQLBecauseItIsSuperCool) и вперёд:)
 

dimagolov

Новичок
можно сказать, что номер (порядок) аргумента ф-ии это то же магическое число, как и все остальное
 

флоппик

promotor fidei
Команда форума
Партнер клуба
dimagolov, именно. :) Но это допустимый magic action, как по мне, когда вопрос стоит в скорости написания, - некоторые вещи проще помнить, чем следовать сложным «универсальным» правилам использования.
 

Angerslave

Новичок
флоппик
Скорости написания чего? Кода, использующего метод? Дык это лишние 20 символов... При нормальной скорости печати - секунд 30. Экономия на спичках? А при написании метода так и вообще быстрее на входящем массиве писать.
 
Сверху