Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Способы создание экземпляров класса


Автор: evilsoul 1.6.2012, 12:23
Всем добрый день или ночь.

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

Есть некий класс, назовем его 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], [второстепенные параметры]);
}



Буду рад любому конструктивному и более-менее развернотому совету.

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

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

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

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

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

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

имеет смысл только в случае если "основные параметры" наделяют класс каким-то определенным смыслом, т.е. действительно имеет место отношение наследования.

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

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

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


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

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

Автор: evilsoul 2.6.2012, 18:54
Все понял, спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)