![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
N0dwis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 18.9.2007 Где: Луганск Репутация: 2 Всего: 4 |
Пишу простенькую модульную cms. Все блоки и модули (в терминах php nuke) организованы в виде классов. Вопрос вот в чем, стоит ли городить что-то типа фабрики классов для более красивого создания объектов типа $a = $modules["class"]() или все-таки ограничиться простым include.
У второго метода я нашел пока только один недостаток - вызывающий модуль не знает имени класса, который надо создать. В принципе решил проблему так - в вызываемом модуле, который содержит класс, заводится глобальная переменная и ей сразу присваивается ссылка на объект класса, содержащегося в этом модуле. Затем вызываемый код эту переменную использует. Что-то типа:
Но мне это кажется корявеньким. Это сообщение отредактировал(а) N0dwis - 7.11.2007, 12:24 |
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Какой-то непонятный вопрос.. Если нужно дружестенное API - заморачивайся... Если не нужно - не заморачивайся.
|
|||
|
||||
N0dwis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 18.9.2007 Где: Луганск Репутация: 2 Всего: 4 |
Ну да невнятно я выразился. В основном меня волнует производительность - для построения фабрики нужно ведь вначале получить список всех доступных классов и т.д. В общем, дополнительные операции.
Насколько это отразится на производительности? Оправдано ли будет с точки зрения удобство(программиста) / производительность. |
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Для удобства ООП и придумано. В больших проектах оно особенно полезно, при грамотном применении конечно. Цель ООП - сделать каждый фрагмент кода объявленным один раз, а использование многократное. ООП является конструктором для приложения, сначала собираешь все инструменты (объекты и интерфейсы), затем из них складываешь само приложение. Захотел что-то поменять - отредактировал ответственный за это класс, нашел ошибку - опять-таки исправил нужный класс и все работает. В плане производительностии ООП часто хуже, чем написание программ "как есть". Но при грамотном, опять же, применении эта разница сойдет на нет. И главное не задрачиваться с объектами, хоть создатель ООП и писал что "все что может быть выделено в отдельный класс, надо выделить в отдельный класс" (примерно так), стоит делить на объекты в рамках твоей задачи. Например есть примеры программирования, где адрес, который можно представить в виде строки разбивают на члены класса индекс, город, дом, улица и тп. Или где можно перебрать объекты просто foreach, решают, что это не наглядно и пишут объект итератор на 4 страницы кода - кому это надо, непонятно. Вообщем ООП хорошая вещь но если не страдаешь фанатизмом к ней. |
|||
|
||||
N0dwis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 18.9.2007 Где: Луганск Репутация: 2 Всего: 4 |
Опять не совсем то, что я хотел услышать.
![]() Я знаю что-такое ООП, опыт программирования на С++ / C# имеется. В С++ программа компилируется, поэтому количество классов не отражается на производительности. Но поскольку PHP интерпретируемый, то для него это не так! А при реализации фабрики прийдется в любом случае подключать ВСЕ классы/модули, классы/блоки (ну в моей реализации), которые включены в систему. В том числе и те, которые в текущей генерации страницы использоваться не будут! Например у меня есть классы, реализующие новости, статьи, ссылки и т.п. В одной генерации будет по-любому использоваться только один модуль, но в фабрику включать прийдется все! (Хотя может и нет... ИДЕЯ! ![]() Все, спасибо, вопрос кажется отпал, буду пытаться реализовать. Это сообщение отредактировал(а) N0dwis - 8.11.2007, 16:48 |
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Вообще-то есть __autoload ф-ция, она вызывается при инстанцировании неизвестного класса или при использовании его статического метода. В неё обычно помещают require_once и никаких "всех" классов не надо. доступна __autoload в PHP не ниже 5 Это сообщение отредактировал(а) flashaa - 8.11.2007, 16:48 |
|||
|
||||
N0dwis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 18.9.2007 Где: Луганск Репутация: 2 Всего: 4 |
Спасибо.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |