Effector
Новичок
написал движок и хочу узнать ваше мнение
Здравствуйте все! Я разрабатываю движок для сайта и хотел бы узнать ваше мнение на счет концепции.
Сейчас расскажу как у меня все устроено.
Есть класс kernel, который предоставляет возможность управлять модулями, библиотеками и т.п.
у класса kernel такие методы и атрибуты:
bool LoadLibrary($library)
bool LoadModule($module)
bool BootRegister($func,$priority=0,$param=false)
void Boot()
bool ShutdownRegister($func,$priority=0,$param=false)
void Shutdown()
bool isLoadedLib($Name)
bool isLoadedMdl($Name)
$lib=false;
$mdl=false;
$errors=false;
LoadLibrary($library) – Загружает библиотеку. Создает объект класса с именем $library и помещает его в ассоциативный массив $lib[$library].
Все модули могут получить доступ к библиотеки через $GLOBALS['kernel']->lib['LibraryName'], где LibraryName имя класса библиотеки.
LoadModule($module) - Загружает модуль. Создает объект класса с именем $module и помещает его в ассоциативный массив $mdl[$module].
BootRegister($func,$priority=0,$param=false) – Регистрирует функцию или метод для запуска в начале загрузки скрипта.
Boot() - Запускает по очереди зарегистрированные скрипты.
ShutdownRegister($func,$priority=0,$param=false) - Регистрирует функцию или метод для запуска в конце загрузки скрипта.
Shutdown() - Запускает зарегистрированные скрипты.
bool isLoadedLib($Name) – проверяет загружена ли библиотека.
bool isLoadedMdl($Name) – проверяет загружен ли модуль.
$errors – объект класса Errors, который перехватывает все ошибки и выводит их в нормальном виде.
Скрипт загрузки:
В файле 'extensions.conf.php' инклудятся все классы библиотек и модулей.
В загрузочном модуле находится вся логика скрипта. Этот файл можно переписать в зависимости от нужд. Например мы хотим подгружать определенный модуль в зависимости от параметра m, переданного через адресную строку.
Тогда загрузочный модуль будет таким:
Пример класса index, который мы открываем если ничего не передано в переменной $_GET['m']:
Такими же могут быть другие модули.
Что вы думаете по поводу такой организации движка?.Чего в нем не хватает?
Еще хочу спросить про то, как лучше организовать приоритет загрузки в методе Boot().
То есть сделать несколько приоритетов, например штук 10 и забить это все в константы. А модули будут потом сами региться в зависимости от того, где им надо. Но тогда возникает вопрос: если есть модуль, который должен быть загружен самым первым и никаким другим, то как это организовать?
Таким модулем может быть класс организующий работу ModRewrite, который будет менять все ссылки на странице на статические, и соответственно при загрузке декодировать их обратно в нормальные.
Здравствуйте все! Я разрабатываю движок для сайта и хотел бы узнать ваше мнение на счет концепции.
Сейчас расскажу как у меня все устроено.
Есть класс kernel, который предоставляет возможность управлять модулями, библиотеками и т.п.
у класса kernel такие методы и атрибуты:
bool LoadLibrary($library)
bool LoadModule($module)
bool BootRegister($func,$priority=0,$param=false)
void Boot()
bool ShutdownRegister($func,$priority=0,$param=false)
void Shutdown()
bool isLoadedLib($Name)
bool isLoadedMdl($Name)
$lib=false;
$mdl=false;
$errors=false;
LoadLibrary($library) – Загружает библиотеку. Создает объект класса с именем $library и помещает его в ассоциативный массив $lib[$library].
Все модули могут получить доступ к библиотеки через $GLOBALS['kernel']->lib['LibraryName'], где LibraryName имя класса библиотеки.
LoadModule($module) - Загружает модуль. Создает объект класса с именем $module и помещает его в ассоциативный массив $mdl[$module].
BootRegister($func,$priority=0,$param=false) – Регистрирует функцию или метод для запуска в начале загрузки скрипта.
Boot() - Запускает по очереди зарегистрированные скрипты.
ShutdownRegister($func,$priority=0,$param=false) - Регистрирует функцию или метод для запуска в конце загрузки скрипта.
Shutdown() - Запускает зарегистрированные скрипты.
bool isLoadedLib($Name) – проверяет загружена ли библиотека.
bool isLoadedMdl($Name) – проверяет загружен ли модуль.
$errors – объект класса Errors, который перехватывает все ошибки и выводит их в нормальном виде.
Скрипт загрузки:
PHP:
<?
//Подключает конфиг ядра
include($_SERVER['DOCUMENT_ROOT'].'/conf/kernel.conf.php');
//Подключает класс ядра
include(ROOT.'/kernel/kernel.php');
//Подключает библиотеку обработки ошибок
include(ROOT.'/kernel/lib/lib.errors.php');
//Создает экземпляр ядра
$kernel=new kernel;
//Загружает пользовательские библиотеки и модули
include(ROOT.'/conf/extensions.conf.php');
//Запускает загрузочный модуль, который будет обрабатывать генерацию страницы
include(ROOT.'/kernel/loader.php');
?>
В загрузочном модуле находится вся логика скрипта. Этот файл можно переписать в зависимости от нужд. Например мы хотим подгружать определенный модуль в зависимости от параметра m, переданного через адресную строку.
Тогда загрузочный модуль будет таким:
PHP:
<? //Файл loader.php
//Запускаем зарегенные ф-ции
$kernel->Boot();
if(isset($_GET['m']))
{
if(!$kernel->isLoadedMdl($_GET['m']))
if(class_exists($_GET['m']))
{
$kernel->LoadModule($_GET['m']);
$m=$_GET['m'];
}
else
{
$m='index';
$kernel->LoadModule($m);
}
}
else
{
$m='index';
$kernel->LoadModule($m);
}
$kernel->mdl[$m]->Show();
$kernel->Shutdown();
?>
PHP:
<?
class index {
public function Show()
{
echo "Index page";
}
}
?>
Что вы думаете по поводу такой организации движка?.Чего в нем не хватает?
Еще хочу спросить про то, как лучше организовать приоритет загрузки в методе Boot().
То есть сделать несколько приоритетов, например штук 10 и забить это все в константы. А модули будут потом сами региться в зависимости от того, где им надо. Но тогда возникает вопрос: если есть модуль, который должен быть загружен самым первым и никаким другим, то как это организовать?
Таким модулем может быть класс организующий работу ModRewrite, который будет менять все ссылки на странице на статические, и соответственно при загрузке декодировать их обратно в нормальные.