Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Организация хуков

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
iflight
Отправлено: 08 Августа, 2011 - 03:42:59
Post Id



Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Март 2011  
Откуда: Россия, Сыктывкар


Помог: 2 раз(а)




На самописном движке хочу реализовать хуки, для удобств расширения функционала с помощью модулей. Надумал пока вот что:

Каждый модуль оформляется в виде php файла с классом, методы этого класса - реализация хуков вида :
PHP:
скопировать код в буфер обмена
  1. modulename_hookname($var){
  2.  //тут необходимые операции
  3. }

Запуск хука происходит так ($this->modules - сисок всех установленных модулей):
PHP:
скопировать код в буфер обмена
  1. function after_new_material_save($material){
  2.                 foreach($this->modules as $mod_name){
  3.                         $mod_path = '/modules/'.$mod_name.'/'.$mod_name.'.php';
  4.                         if(is_file($mod_path)){
  5.                                 include_once($mod_path);
  6.                                 $mod = new $mod_name;
  7.                                 $method = $mod_name."_after_new_material_save";
  8.                                 if(method_exists($mod,$method)){
  9.                                         $mod->$method($material);
  10.                                 }
  11.                         }
  12.                 }
  13.         }

а в "ядре" движка функции hookname() запускаются в нужных местах. (например after_new_material_save($material) сразу после сохранения материала).

Но с таким подходом в итоге можно получить огромное количество инклудов, что не есть хорошо. Как более рационально можно подобное организовать? мб подкинте ссылок, хотя бы на английском, ничего толкового найти не могу.
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Августа, 2011 - 07:54:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




 
 Top
iflight
Отправлено: 08 Августа, 2011 - 11:32:57
Post Id



Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Март 2011  
Откуда: Россия, Сыктывкар


Помог: 2 раз(а)




DeepVarvar не то. В том примере "модули" не могут влиять на работу ядра при определенных действиях.
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Августа, 2011 - 12:24:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




iflight пишет:
include_once
iflight пишет:
огромное количество инклудов
Сами себе противоречите.
Ну даже если подгрузим на странице одного модуля парочку других модулей, это сильно не повлияет.
А если модуль был подключен ранее, с *_once пых на диск даже не полезет.
Ссылку я вам дал чтобы вы посмотрели в сторону __autoload чтобы не делать ваш ненужный цикл в строке 2 последнего примера.
Далее если вы читали очем там пишут,
за счет контроллера можно обратиться к любому из модулей, который автоматически подгрузится если не был загружен ранее.
 
 Top
iflight
Отправлено: 08 Августа, 2011 - 12:34:54
Post Id



Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Март 2011  
Откуда: Россия, Сыктывкар


Помог: 2 раз(а)




дело в том что я использую приведенный вами пример))
По поводу автолоад - уже используется в главном файле, я так понимаю больше его переопределять нельзя?
Насчет *_once я как то не подумал, каюсьНедовольство, огорчение
Склонили меня к тому что не так уж все и плохоУлыбка
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Августа, 2011 - 12:37:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




iflight пишет:
больше его переопределять нельзя?
Незачем - все "хуки" и "пуки" уже доступны изначально Закатив глазки
 
 Top
iflight
Отправлено: 08 Августа, 2011 - 12:44:44
Post Id



Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Март 2011  
Откуда: Россия, Сыктывкар


Помог: 2 раз(а)




Ну если делать автолоад как на хабре то нет, но можно его дописать) Так и поступлюУлыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB