Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача большого числа параметров в функцию 
V
    Опции темы
DimaSiK
Дата 21.4.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 20.8.2006

Репутация: нет
Всего: нет



Пишу некий класс, в классе есть метод, который принимает допустим 15 параметров. Стала задача, как бы красиво оформить передачу вот этих параметров. Параметры все приходят извне. Если все параметры передавать как отдельные переменные, то вызов метода будет ужасным типа $someObj(param1, param2, param3, param4, param5, param6, param7 ....  ), мне кажется это не сильно приятно. Рассматриваю другой вариант - передача параметров через массив или с использованием функций get_func_args(). Тогда возникает проблема, что тот, кто хочет передать параметры должен знать, как работает метод и что он может принимать. Это я думаю не является верным решением при разработке и использовании класса. Увы, число параметров сократить нельзя. Работы ведется с кредитными карточками, а том в запросе могут участвовать до 20 параметров. Можете что-нибудь посоветовать?


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
pizzz
Дата 21.4.2009, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 14.12.2008
Где: Омск

Репутация: 6
Всего: 8



Не внимательно прочитал smile 

Это сообщение отредактировал(а) pizzz - 22.4.2009, 00:01
--------------------
Спасибо много, жмем кнопку репутация.  Извините меня за орфографические ошибки, я стараюсь не ошибаться, а они все равно просачиваются гады.     
PM MAIL ICQ   Вверх
DimaSiK
Дата 22.4.2009, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 20.8.2006

Репутация: нет
Всего: нет



Цитата(pizzz @ 21.4.2009,  23:51)
Конечно. Массив.

Если массив, то передавать в виде ключ => значение. Тогда тот, кто вызывает данный метод должен знать все ключи, которые можно передать в метод. Мне кажется это не верно, хотя могу и ошибаться.


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
pizzz
Дата 22.4.2009, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 14.12.2008
Где: Омск

Репутация: 6
Всего: 8



Тогда как вариант разбить метод.
--------------------
Спасибо много, жмем кнопку репутация.  Извините меня за орфографические ошибки, я стараюсь не ошибаться, а они все равно просачиваются гады.     
PM MAIL ICQ   Вверх
Kirsan
Дата 22.4.2009, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 4.11.2008
Где: г.Волжский, Волго градская обл.

Репутация: 1
Всего: 1



Если количество параметров у метода действительно никак уже не уменьшить, то вряд ли можно что-то красивее ассоциативного массива придумать. Просто в файле класса в комментариях укажите структуру массива. Причём комментарии лучше указывать в формате PhpDocumentor'а. Тогда описание структуры массива увидят и те, кто залезет в исходники, чтобы посмотреть, какие методы предоставляет класс, и те, кто пользуется какими-либо IDE, которые парсят файлы и выделяют объектную структуру. Наиболее популярные IDE как раз понимают комментарии в формате phpDoc.
p.s. а по свойствам класса точно часть параметров не удастся раскидать и задавать их при инициализаци объекта, например?
PM ICQ   Вверх
DimaSiK
Дата 22.4.2009, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 20.8.2006

Репутация: нет
Всего: нет



Нет, разбить на несколько методов не получиться, так как есть метод addTrunsaction() и они принимается пачку данных, которые уходят на сервер и все тут  smile 


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
skyboy
Дата 22.4.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



в "более декстопных" языках в таком случае параметры группируются в объекты. вместо 15 параметров - 2-3 объекта(параметры группируются по смыслу).
в РНР же действительно удобно использовать ассоциативные массивы. И ничего в этом страшного нет. 
Цитата(DimaSiK @  21.4.2009,  23:02 Найти цитируемый пост)
Тогда тот, кто вызывает данный метод должен знать все ключи, которые можно передать в метод.

Вызывающий функцию при любой организации работы с параметрами обязан знать, какой параметр что обозначает.
PM MAIL   Вверх
DimaSiK
Дата 22.4.2009, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 20.8.2006

Репутация: нет
Всего: нет



Цитата(skyboy @ 22.4.2009,  11:57)
в "более декстопных" языках в таком случае параметры группируются в объекты. вместо 15 параметров - 2-3 объекта(параметры группируются по смыслу).
в РНР же действительно удобно использовать ассоциативные массивы. И ничего в этом страшного нет. 
Цитата(DimaSiK @  21.4.2009,  23:02 Найти цитируемый пост)
Тогда тот, кто вызывает данный метод должен знать все ключи, которые можно передать в метод.

Вызывающий функцию при любой организации работы с параметрами обязан знать, какой параметр что обозначает.

Понятно. Спасибо всем


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
nerezus
Дата 24.4.2009, 19:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

Пишу некий класс, в классе есть метод, который принимает допустим 15 параметров. 
 Если 15(а не неограниченное количество) - то это ошибка проектирования.
Используй 2-3 параметра на метод.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1037 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.