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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Способы создание экземпляров класса 
V
    Опции темы
evilsoul
Дата 1.6.2012, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем добрый день или ночь.

Собственно перейдем сразу к делу.

Есть некий класс, назовем его Foo, в системе создаются экземпляры этого класса.

new Foo([набор основных параметров 1], [второстепенные параметры]);
new Foo([набор основных параметров 2], [второстепенные параметры]);
new Foo([набор основных параметров 3], [второстепенные параметры]);

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

Есть несколько мыслей как это сделать:

- Наследоваться от этого класса и породить еще три класса в котором будут уже жестко вбиты основные параметры. 

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

- Комбинация первых двух вариантов, создать дочерние классы и в фабрике порождать уже объекты этих классов.

Насколько приемлем варинат, если добавить в класс Foo статические методы вида

Код

static function createVariant1([второстепенные параметры])
{
    return new Foo([набор основых параметров 1], [второстепенные параметры]);
}

static function createVariant2([второстепенные параметры])
{
    return new Foo([набор основых параметров 2], [второстепенные параметры]);
}


static function createVariant3([второстепенные параметры])
{
    return new Foo([набор основых параметров 3], [второстепенные параметры]);
}



Буду рад любому конструктивному и более-менее развернотому совету.
PM MAIL   Вверх
ksnk
Дата 1.6.2012, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата(evilsoul @  1.6.2012,  12:23 Найти цитируемый пост)
Наследоваться от этого класса и породить еще три класса в котором будут уже жестко вбиты основные параметры. 

Если кроме конструкторов никаких другого нового поведения не предполагается, то лучше 
Цитата(evilsoul @  1.6.2012,  12:23 Найти цитируемый пост)
Использовать фабрику для создания нужных экземпляров класса.

Кто гарантирует, что не появится новый набор "постоянных параметров"? Если фабрика уже есть, то выбор должен быть туда.

Третий вариант проигрывает по эффетивности первым двум, а визуально и по смыслу ничего нового не добавляет.

Если нет пока фабрики, то можно подумать о множественных конструкторах, вроде примера со статическими функциями.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
baldina
Дата 1.6.2012, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(evilsoul @  1.6.2012,  12:23 Найти цитируемый пост)
Наследоваться от этого класса и породить еще три класса

имеет смысл только в случае если "основные параметры" наделяют класс каким-то определенным смыслом, т.е. действительно имеет место отношение наследования.
PM MAIL   Вверх
Sentox
Дата 1.6.2012, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


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

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



Если классы являются какой то одно концепции или абстракции лучше создавать инициализацию параметров в абстрактной фабрике. Но этот способ несколько скрывает понимание архитектуры, то есть инициализация параметров находится на "скрытом" уровне.
Если есть прямое указание для создания дочернего как типа  "является"  (as-is), как сказал baldina, лучше наследование, так как понимание и чтение архитектуры, кода клиента увеличивается. Так же увеличивается инкапсуляция типовых параметров. Судя по всему, основные параметры у Вас и есть свойства типов, если это так, лучше выделить в дочерние (расширяемые классы).

Это сообщение отредактировал(а) Sentox - 1.6.2012, 20:47
PM MAIL   Вверх
evilsoul
Дата 2.6.2012, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Добавлено через 12 минут и 21 секунду
Цитата(ksnk @  1.6.2012,  15:08 Найти цитируемый пост)
Если нет пока фабрики, то можно подумать о множественных конструкторах, вроде примера со статическими функциями. 


А можно как-нибудь на примере, насколько я знаю, пхп не позволяет описать несколько конструкторов для класса.
PM MAIL   Вверх
ksnk
Дата 2.6.2012, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



А чем собственный вариант не подходит? Вызыать его нужно не через new, вот и вся разница


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
evilsoul
Дата 2.6.2012, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все понял, спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0761 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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