как вызвать метов (имя метода в переменной) и передать ему параметры из массива?

jeno

Новичок
как вызвать метов (имя метода в переменной) и передать ему параметры из массива?

Добрый день.

Есть примерно вот такой кусок кода:

Код:
$methodName="somefunc";

$myClass->$methodName();
таким образом я вызываю метод....имя метода у меня в отдельной переменной...
но вот счас нужно передавать ему параметры из массива... (кол. параметров неизвестно)

раньше я этим не сталкивался, функций для вызова методов не знаю(
на ум приходит только eval("\$myClass->".$methodName."(".$vars.");"); (что ооочень не хотелось бы, имхо это не так быстро + ужасно не грамотно), и что-типа: $myClass->$methodName($var1,$var2,$var3,$var4); и перед этим присваивать этим $var1,$var2 и т.д. NULL или какое-то значение =\ (но это еще хуже eval, темболее, параметров может быть оочень много)

подскажите пожалуйста как решить данную задачу )
 

soines

Новичок
но вот счас нужно передавать ему параметры из массива... (кол. параметров неизвестно)
У класса неправильный интерфейс, лучше изменить его, чем городить подобные конструкции.
 

zerkms

TDD infected
Команда форума
soines
чересчур безапелляционно.

в защиту: у sprintf() аналогичный интерфейс и ничего - всё оукей :)
 

zerkms

TDD infected
Команда форума
флоппик
а в контейнере-то зачем так аргументы?
 

soines

Новичок
zerkms, ну согласись что горааааззддо чаще ошибка именно в этом, что люди хотят передать в один метод сразу кучу параметров вместо того, чтобы сделать несколько небольшов понятных методов. ООП ради ООП получается. Да и вообще в таком случае гораздо удобнее передавать вторым аргументом массив аля jquery-style.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Да и вообще в таком случае гораздо удобнее передавать вторым аргументом массив аля jquery-style.
Не всегда можно работать со своим кодом. Иногда это часть чужого, цена изменения которого слишком велика.
а в контейнере-то зачем так аргументы?
А он у меня и контейнер и хранитель конфигурации - разрешает зависимости, и знает о параметрах вызова поэтому.
 

soines

Новичок
Не всегда можно работать со своим кодом. Иногда это часть чужого, цена изменения которого слишком велика.
А разве не правильнее тогда сделать класс обертку над этой "частью чужого кода"?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
А разве не правильнее тогда сделать класс обертку над этой "частью чужого кода"?
А если это ZF например? Каждый класс оборачивать? С выходом каждой версии дописывать?
 

fixxxer

К.О.
Партнер клуба
там вроде нет такого говнокода чтобы пришлось "обернуть и забыть" :)
 

soines

Новичок
флоппик, приведи пример из ZF где у тебя будет такая ситуация.

Скорее всего у ТС ситуация когда есть метод:

function someMethod( $param1 = 'a', $param2 = 'b', $param3 = 'c' ) {}

и он хочет чтобы если данные были переданы, то они подставились, если нет - то использовались значения по умолчанию. И поступать в таком случае надо абсолютно иначе.

P.S. хотя может быть я и ошибаюсь в задаче ТС.
 

SiZE

Новичок
В методе можно func_get_args вызвать и чо нить потом сделать. Задача мне кажется до конца не ясна.
 

jeno

Новичок
на самом деле тут уйму классом (это как модули CMS), в разных ситуация название метода разное (если например мы на странице "новости" то метод showNews() если на странице поиска по новостям то newsSearch() и т.д. + аргументы везде разные...в некоторых методах их вообще нет)
 

ХакИрФсимагущий

[засикречино]
А почему бы не передавать 1 массив а в нутри метода его либо форечить либо как есть писать?

ПС Тут у меня вопрос возник может ли элемент массива сожержать ссылку на обьект или сам обьект?
 

weregod

unserializer
ХакИрФсимагущий
> может ли элемент массива сожержать ссылку на обьект или сам обьект?
может, для этого Вам нужно изучить обращение с объектами в PHP4 (если актуально) и PHP5

[grammar nazi]
выучите уже языки и транскрипции, на которых/которыми пользуетесь в форуме
[/grammar nazi]
 

ХакИрФсимагущий

[засикречино]
weregod
спасибо, а с объектами я дружу только на уровне http://php.su/learnphp/phpoo/.(ну и совсем немного на уроне ActionScript3) Просил когдато дать ссыку где есть все подробно мне дали мануал на английском(я не очень хоршо понимаю английские мануалы)
 

FB3

Новичок
ХакИрФсимагущий
Про объекты читай книжки, много есть хороших и на русском уже давно.
 
Сверху