![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
BSCheshir |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.11.2012 Репутация: нет Всего: нет |
подскажите, есть ли методы, позволяющие реализовать такое поведение для произвольного числа параметров
где f2 может быть любой функцией (т.е. внутрь для решения задачи не лазим) Это сообщение отредактировал(а) BSCheshir - 21.11.2012, 16:03 |
|||
|
||||
Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
Не совсем ясно что вы хотите.. Вы хотите реализовать выполнение в F1 произвольную функцию через параметр?
Это называется анонимные функции в 5.3+
для создания функций с переменным количеством N Аргументов есть функция func_get_args() В 5.3 версии есть приятные изменения которых раньше не было Это сообщение отредактировал(а) Sanchezzz - 21.11.2012, 16:37 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
BSCheshir |
|
||||||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.11.2012 Репутация: нет Всего: нет |
нет, я хочу передать функции набор параметров, который предоставлен в массиве
и спрашиваю: есть ли методы, позволяющие реализовать такое поведение для произвольного числа параметров? чтобы понятнее - существует ли какой-нить такой синтаксис:
или
Называется - задай правильно вопрос - получишь в нём ответ
вот. это, теоретически, оно ![]() ![]()
Так, а теперь осталось вспомнить, что надо не функцию вызвать, а создать экземпляр класса ![]()
Это сообщение отредактировал(а) BSCheshir - 21.11.2012, 17:36 |
||||||||||||||
|
|||||||||||||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 14 Всего: 137 |
||||
|
||||
BSCheshir |
|
||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.11.2012 Репутация: нет Всего: нет |
Нет, не extract
что-то наподобие такого должно по идее быть о. или этого. ReflectionMethod::invokeArgs() You can't call the constructor of $class like this:
That's no valid callback as first parameter. Let's pick this apart:
Is the same as
Это сообщение отредактировал(а) BSCheshir - 21.11.2012, 22:05 |
||||||||||
|
|||||||||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
-------------------- Мир это Я. Живее всех живых. |
|||
|
||||
Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
Мне такое чувство что вы пытаетесь создать второй Underscore.php
-------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
http://ru2.php.net/manual/en/reflectioncla...nstanceargs.php
откуда-то из недр php.net -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
BSCheshir |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.11.2012 Репутация: нет Всего: нет |
ksnk, вот он - метод моей мечты
![]() Есть некоторые ограничения, но... Оно ![]() в итоге получилось чуть сложнее
Sanchezzz, ну разве что в этой части
Это сообщение отредактировал(а) BSCheshir - 22.11.2012, 13:44 |
||||
|
|||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
BSCheshir, вы можете привести вменяемый пример использования этого конструкта?
-------------------- Мир это Я. Живее всех живых. |
|||
|
||||
BSCheshir |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.11.2012 Репутация: нет Всего: нет |
Fortop, ещё и вменяемый? Он же и так красивый, зачем вменяемый? Ну, щас попробуем изобразить
Это сообщение отредактировал(а) BSCheshir - 23.11.2012, 11:59 |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Ну я не увидел смысла в этой фабрике. Красоты соответственно. -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Fortop, Какая разница?
Вызвать конструктор объекта с определенным числом параметров, или функцию объекта, с тем-же числом параметров, предварительно вызвав его конструктор без параметров. Во втором случае нам нужен специфический класс, который позволит с собой так поступить, а в первом - любой. В каком месте более некрасиво? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Fortop |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
ksnk, ничерта не понял
![]()
Т.е. ты настаиваешь на том, что второй случай более красив при том, что он же и более ограничен? -------------------- Мир это Я. Живее всех живых. |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Присмотрелся, наконец, к коду BSCheshir, и тоже не понял смысла
Fortop, Мои рассуждения касались другого случая. Решается задача создания объекта по имени и известному набору параметров. Если пользоваться ReflectionClass, ее можно решить для любых классов(первый случай). Если не пользоваться - только для специально под это заточенных( второй). -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Все верно, только я вот сходу плохо могу придумать в каком месте в пхп такая гибкость может потребоваться, возможно просто из-за недостатка опыта в каких-то областях. А так, как фишка - да. -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
BSCheshir |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.11.2012 Репутация: нет Всего: нет |
||||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Отсутствие смысла. Код ведь красив не сам по себе.
Вот смотри, мы же коллекцию объектов всегда используем в каком-то конкретном месте, и крайне редко это такая высокая абстракция, которая не знает ничего об интерфейсе объектов, кроме того, что у них есть конструктор. Добавив интерфейс установки параметров скопом, или же задав возможность конструктора класса получать параметры массивом. Ты сделаешь код более читаемым при той же функциональности. -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
BSCheshir |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.11.2012 Репутация: нет Всего: нет |
т.е. с твоей точки зрения более красиво то же самое так записать?
Или каждый раз при создани каждого следующего экземпляра каждого класса (даже не фабрикой) нужно писать
Это сообщение отредактировал(а) BSCheshir - 27.11.2012, 11:24 |
||||
|
|||||
Fortop |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Я выше пример давал
Но ты невнимательно прочел про параметры массивом
Поскольку в коллекции у тебя чаще всего однотипные же объекты, число параметров у которых не отличается и принцип работы с которыми одинаков. Все индивидуальности с лихвой покрываются таким
Я потому и попросил вменяемый пример, где твой код можно использовать. Потому что не вижу каких-либо удобств от него. -------------------- Мир это Я. Живее всех живых. |
||||||
|
|||||||
BSCheshir |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.11.2012 Репутация: нет Всего: нет |
То что не возражаю по всем пунктам - может значить не только то, что невнимательно читаю, но и то, что согласен;) Но раз уж зашел разговор о параметрах в массиве.
Все отлично, даже более - можно ассоциативным массивом передавать -
Вопрос в том, что не подходит в применении к уже существующим классам, которые написаны без учёта того, что будет передаватся массив. Или, например, у одного передаётся ассоциативный массив первым параметром, у другого - список аргументов, у третьего - допустим, пусть будет массив из примера.
|
||||
|
|||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
BSCheshir, остался основной вопрос: зачем всё это нужно?
![]() вы изобрели вариант DI, однако полезность его не очевидна, а в проектах (фреймворках), где DI интенсивно эксплуатируется, есть свои решения, не самые плохие. |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Понятное дело что не подходит. Я не знаю сколько там у вас легаси кода, но на мой личный взгляд проще привести к общим интерфейсам, да и полезнее в будущем. -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Fortop, Одно из применений - инициализация классов из файла конфигурации.
К примеру, класс mail, отсылающий сообщения, может быть стандартным mail'ом, SMTP транспортом "через mail-ru-google-com", skype и icq мессенджером и так далее. Инициализация каждого из них требует разных параметров, однако интерфейс всех классов сведен к фабричному mail'у. Параметры инициализации нужного транспорта - ассоциативный массив с параметрами в конфиге. С точки зрения юзера - нужно только выбрать нужный транспорт по названию. Вполне, на мой взгляд, кошерная схема. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Fortop |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Причем чужих классов транспорта С разнородными сигнатурами. И нужно это в недрах фреймворка где-то глубоко.
Жаль не нагуглю быстро статью. Там обсуждался вопрос выноса программируемых свойств сущностей в конфиги. Например, тот же Zend_Form может полностью задаваться в конфигурационном файле. Но как справедливо говорилось в статье, мы этим просто подменяем программирование в коде, на программирование в конфиге и зачастую не меньшим объемом, но другим синтаксисом... -------------------- Мир это Я. Живее всех живых. |
||||
|
|||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
спор о dependency injection сродни религиозному
![]() |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Лично мне Di удобен в таком варианте
Так что спора особо не вижу. P.S. как один из вариантов http://phemto.sourceforge.net/quick-start.php -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
BSCheshir |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.11.2012 Репутация: нет Всего: нет |
Fortop, т.е. всё-таки удобнее передавать параметры инициализации в конструктор, да? Или тут от предмета дискуссии зависит? ;)
|
|||
|
||||
Fortop |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Вот так удобнее
-------------------- Мир это Я. Живее всех живых. |
||||
|
|||||
xoptov |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 16.2.2008 Репутация: нет Всего: нет |
Это не синтакис хитрый, это ты программист никакой... |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |