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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модульность движка 
V
    Опции темы
gvozd
Дата 12.6.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, уважаемые коллеги. Очень нужна Ваша помощь.
Я пишу движок для одного сайта. Хочу сделать модульную структуру, но не получается инициализировать модули. По задумке модуль представляет собой файл ModuleName.php:
Код

<?php
    class ModuleName {
        function ModuleName() {
            //Выполнение необходимых действий.
        }
    }
?>


Все модули лежат в папке modules. Проблема заключается в следующем: я перебираю все файлы и делаю include, но они не инициализируются. Подскажите, пожалуйста, как мне инициализировать все модули?

И как обратиться из класса модуля к классу шаблона, инициализированному в index.php?

Заранее благодарю, если есть ошибки в проектировании, прошу указать.
PM MAIL ICQ   Вверх
skyboy
Дата 12.6.2007, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(gvozd @  12.6.2007,  17:48 Найти цитируемый пост)
но они не инициализируются

кто "они"? Как могут файлы инициализироваться? поподробнее, пожалуйста.
PM MAIL   Вверх
gvozd
Дата 12.6.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Они - классы. То есть, я делаю include каждому файлу (в каждом файле свой класс) и мне их нужно как-то все проинициализировать, чтобы не делать вручную на каждый модуль $module=new ModuleName();.
PM MAIL ICQ   Вверх
Mymik
Дата 12.6.2007, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

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



gvozd, а зачем тебе их инициализировать... модульность системы предусматривает то, что эти модули будут описывать свою структуру и выполнять ее сами. Т.е. тебе надо только лишь подключать их и все.

Добавлено через 3 минуты и 43 секунды
Ну а если тебе нужно именно создать объект этого класса по его имени (к примеру) можно воспользовать 
Код

/* Подгружаешь тип */
$class = new ReflectionClass($className);
/* Непосредственное создание объекта класса */
$instance = $class->newInstance();

ReflectionClass принимает строчку в виде имени класса и этот класс должен быть описан где-то выше.
А дальше через методы ReflectionClass находишь нужные тебе методы в твоем классе и вызываешь их через Invoke() Все просто. Но это работает только в php5> Как в php4 сделать такое чудо не знаю :о(


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
gvozd
Дата 12.6.2007, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А как запустить их выполнение без инициализации? Просто include они не выполняются.
PM MAIL ICQ   Вверх
WolfON
Дата 12.6.2007, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Надо учить PHP.
Ты можешь вызвать без инициализации только статический метод класса.
PM MAIL ICQ   Вверх
skyboy
Дата 12.6.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



если тебе так нужны объекты  - так создавай их!
some.php:
Код

<?php
class TMyClass {
 function some_method() {
   echo '1111';
   return 0;
 }
}
$newMyClass= new TMyClass();
?>

теперь при вызове 
Код

include "some.php";

ты автоматически получишь объект класса TMyClass.
PM MAIL   Вверх
BuShaRt
Дата 12.6.2007, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Подход изначально некоректен! 
В идеале модули - это каталог со стандартным, для опредленного движка, наборо файлов.
И движок в для определенных действий считывает нужные файлы, причем сам функционал модуля, может быть в любой форме, но "вкл/выкл" врядле как то связан с файлами функционала.
PM MAIL   Вверх
gvozd
Дата 13.6.2007, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



skyboy, да, так работает, спасибо!  smile 


BuShaRt, скажите, пожалуйста, а что некорректного в моем подходе? У меня тоже каталог, в нем файлы, выполняющие разную функциональность. Только загружаться должны все модули из папки. То есть, движок инклюдит все файлы, они должны прочесть нужные GET параметры, считать из БД и сформировать текст странички, после чего вставить его в нужное место шаблона. У меня была проблема с созданием экземпляра класса для каждого модуля, пример skyboy решил эту проблему, создав экземпляр класса в самом модуле. Все же интересно, этот подход правильный или нет, так как написать хочу по уму?
PM MAIL ICQ   Вверх
BuShaRt
Дата 13.6.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(gvozd @  13.6.2007,  08:05 Найти цитируемый пост)
 Только загружаться должны все модули из папки. 

вот в этом и проблема, почему это при вызове одного модуля должны работать все, даже отключенные?
PM MAIL   Вверх
gvozd
Дата 13.6.2007, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



BuShaRt, а понятия отключенные просто не предусмотрено, то есть установка = копирование в папку, отключение = удаление.
PM MAIL ICQ   Вверх
BuShaRt
Дата 13.6.2007, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



gvozd
от куда копирование? дублирование папок получаеться будет?
PM MAIL   Вверх
gvozd
Дата 13.6.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



BuShaRt, нет, модули будут выглядеть так:
../modules/module1.php
../modules/module2.php

Удаляем один из модулей он больше не работает, заливаем другой - он подхватывается движком.
PM MAIL ICQ   Вверх
sTa1kEr
Дата 13.6.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


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

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



Цитата(Mymik @  12.6.2007,  19:47 Найти цитируемый пост)
/* Подгружаешь тип */
$class = new ReflectionClass($className);
/* Непосредственное создание объекта класса */
$instance = $class->newInstance();

Для создания объекта с переменным именем класса не обязательно использовать рефлекшен.
Код

$object = new $className();

Цитата(gvozd @  13.6.2007,  08:05 Найти цитируемый пост)
Все же интересно, этот подход правильный или нет, так как написать хочу по уму? 

По уму, лучше написать некий mediator, который бы загружал классы нужных модулей и инициализировал их по мере необходимости.
PM MAIL   Вверх
SamDark
Дата 13.6.2007, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



По-моему так вообще страничка одного типа = один модуль.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0879 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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