[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Шаблон "Наблюдатель"
Arh
Возник вопрос, как можно влиять на систему? (на ядро сайта, на модули, на библиотеки, на сервисы, на код короче)

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

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

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



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

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

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

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
J1upuk
А твой объект $DI виден отовсюду, даже из методов и функций без объявления его глобальным? Если да то как так сделать?) Или ты имел в виду "//Дальше где угодно в коде" в той же области видимости?
Arh
Объект обычный, просто хранилище статическое, так же как у тебя ($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();


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.