Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Шаблон "Наблюдатель"
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2103
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 3 дня
Карма: 70




Возник вопрос, как можно влиять на систему? (на ядро сайта, на модули, на библиотеки, на сервисы, на код короче)

Я раньше об этом как то не задумывался.
Потом задумался что в зависимости от ситуации может понадобится что то поменять.
Например все приложения используют класс Cache, который кэширует данные сохраняя их в файлы, но если установлен Memcache, что бы использовался он.
Сделал DI, теперь вначале скрипта стоит условие
if (MEMCACHE) {

$DI->set('Cache', new Memcache);

}
//Дальше где угодно в коде
$Cache = $DI->get('Cache');



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

Но потом я увидел что для некоторых CMS есть специальные модули, которые надо только подключить и всё, остальное они сделают сами.
Примеры: cms

Стало непонятно, как? Ведь пока нужный модуль запуститься, уже половина системы может отработать, соответственно половина кэша запишется на локальный сервер, половина на кэширующий.
Потом я вспомнил про хуки в друпале, нарыл шаблон "наблюдатель", но так и не понял как это работает.


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
J1upuk  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 132
Пользователь №: 37693
На форуме: 3 года, 5 месяцев, 13 дней
Карма: 1




А твой объект $DI виден отовсюду, даже из методов и функций без объявления его глобальным? Если да то как так сделать?) Или ты имел в виду "//Дальше где угодно в коде" в той же области видимости?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2103
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 3 дня
Карма: 70




Объект обычный, просто хранилище статическое, так же как у тебя ($container).
Потесть свой же класс =)
class DI
{
protected static $container = [];

public function set($key, $closure)
{
self::$container[$key] = $closure;
}

public function get($key)
{
return self::$container[$key]->__invoke();
}
}


$DI = new DI();
$DI->set('hello', function(){
return 'Привет';
});

function test () {

$DI = new DI();
echo $DI->get('hello');

}

test();


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 8 месяцев, 28 дней
Карма: 15




Чего не понял в паттерне Наблюдатель?

Есть куча наблюдателей и есть субъект, наблюдатели в конструктор получают субъект, наблюдатель у себя в конструкторе вызвает метод субъекта и передает ему ссылку на себя $this. Этот метод (в классе субъекта) просто добавляет объект-наблюдателя в массив. Всё. Субъект потом просто обходит с помощью foreach массив с объектами (наблюдателями) и дергает у каждого из них метод. Вся суть паттерна.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса