![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
gvozd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 25.7.2006 Репутация: нет Всего: нет |
Здравствуйте, уважаемые коллеги. Очень нужна Ваша помощь.
Я пишу движок для одного сайта. Хочу сделать модульную структуру, но не получается инициализировать модули. По задумке модуль представляет собой файл ModuleName.php:
Все модули лежат в папке modules. Проблема заключается в следующем: я перебираю все файлы и делаю include, но они не инициализируются. Подскажите, пожалуйста, как мне инициализировать все модули? И как обратиться из класса модуля к классу шаблона, инициализированному в index.php? Заранее благодарю, если есть ошибки в проектировании, прошу указать. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
gvozd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 25.7.2006 Репутация: нет Всего: нет |
Они - классы. То есть, я делаю include каждому файлу (в каждом файле свой класс) и мне их нужно как-то все проинициализировать, чтобы не делать вручную на каждый модуль $module=new ModuleName();.
|
|||
|
||||
Mymik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1474 Регистрация: 12.5.2006 Где: Lamer-центер Репутация: нет Всего: 78 |
gvozd, а зачем тебе их инициализировать... модульность системы предусматривает то, что эти модули будут описывать свою структуру и выполнять ее сами. Т.е. тебе надо только лишь подключать их и все.
Добавлено через 3 минуты и 43 секунды Ну а если тебе нужно именно создать объект этого класса по его имени (к примеру) можно воспользовать
ReflectionClass принимает строчку в виде имени класса и этот класс должен быть описан где-то выше. А дальше через методы ReflectionClass находишь нужные тебе методы в твоем классе и вызываешь их через Invoke() Все просто. Но это работает только в php5> Как в php4 сделать такое чудо не знаю :о( -------------------- |
|||
|
||||
gvozd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 25.7.2006 Репутация: нет Всего: нет |
А как запустить их выполнение без инициализации? Просто include они не выполняются.
|
|||
|
||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 6 Всего: 8 |
Надо учить PHP.
Ты можешь вызвать без инициализации только статический метод класса. |
|||
|
||||
skyboy |
|
||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
если тебе так нужны объекты - так создавай их!
some.php:
теперь при вызове
ты автоматически получишь объект класса TMyClass. |
||||
|
|||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Подход изначально некоректен!
В идеале модули - это каталог со стандартным, для опредленного движка, наборо файлов. И движок в для определенных действий считывает нужные файлы, причем сам функционал модуля, может быть в любой форме, но "вкл/выкл" врядле как то связан с файлами функционала. |
|||
|
||||
gvozd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 25.7.2006 Репутация: нет Всего: нет |
skyboy, да, так работает, спасибо!
![]() BuShaRt, скажите, пожалуйста, а что некорректного в моем подходе? У меня тоже каталог, в нем файлы, выполняющие разную функциональность. Только загружаться должны все модули из папки. То есть, движок инклюдит все файлы, они должны прочесть нужные GET параметры, считать из БД и сформировать текст странички, после чего вставить его в нужное место шаблона. У меня была проблема с созданием экземпляра класса для каждого модуля, пример skyboy решил эту проблему, создав экземпляр класса в самом модуле. Все же интересно, этот подход правильный или нет, так как написать хочу по уму? |
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
||||
|
||||
gvozd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 25.7.2006 Репутация: нет Всего: нет |
BuShaRt, а понятия отключенные просто не предусмотрено, то есть установка = копирование в папку, отключение = удаление.
|
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
gvozd,
от куда копирование? дублирование папок получаеться будет? |
|||
|
||||
gvozd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 25.7.2006 Репутация: нет Всего: нет |
BuShaRt, нет, модули будут выглядеть так:
../modules/module1.php ../modules/module2.php Удаляем один из модулей он больше не работает, заливаем другой - он подхватывается движком. |
|||
|
||||
sTa1kEr |
|
||||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Для создания объекта с переменным именем класса не обязательно использовать рефлекшен.
По уму, лучше написать некий mediator, который бы загружал классы нужных модулей и инициализировал их по мере необходимости. |
||||||
|
|||||||
SamDark |
|
|||
![]() Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1424 Регистрация: 25.7.2006 Где: Voronezh Репутация: 10 Всего: 38 |
По-моему так вообще страничка одного типа = один модуль.
-------------------- rmcreative.ru — Это жжж неспроста... yiiframework.ru — О фреймворке Yii на русском. reggi — здесь я регистрирую домены |
|||
|
||||
gvozd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 25.7.2006 Репутация: нет Всего: нет |
Всем спасибо, вопрос решен.
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |