> Где я говорил о константах?
когда ты пишешь registry:: - это означает, что ты обращаешься к свойствам "глобального константного объекта" или попросу "класса".
> Сделайте сервис, его и используйте.
замечательно, у нас получилось нечто вроде:
PHP:
function anyMethod(){
// что-то делаем
$service = new DbCopyService();
$service->setSource(registry::instance()->get('primary_db'));
$service->setDestination(registry::instance()->get('secondary_db'));
$service->copy();
// что-то делаем
}
теперь из внешнего кода нужно вызвать этот метод, но чтобы он работал не с теми базами, что прописаны в реестре под именами 'primary_db' и 'secondary_db'. впрочем, можешь не отвечать, за тебя это уже сделал whirlwind:
> Мы не трогаем ни этап инициализации,
> ни код существующих классов, все решается
> локально на этом самом месте (с функциями так не получится)
молодец, ты реализовал паттерн "стэк". ^_^ проблема в том, что ты зачем-то используешь синглетон сознательно ограничивая себя единственной реализацией и тут же с помощью стэка обходишь это ограничение. к чему эти пляски с бубном?
то же самое, но проще:
PHP:
global $parser;
$newParser= new Parser;
$newParser->support= 'pupkin';
array_unshift( $parser, $newParser );
$myObject = new PageController(); // этот объект использует парсер $parser[0] с подставными значениями
$myObject->run();
array_shift( $parser );
и на функциях реализовать можно всё, что угодно. доказано ассемблером ^_^
-~{}~ 06.11.07 22:43:
хотя нет, что-то я тормознул. стэк ты так и не реализовал. ты реализовал паттерн "глобальная переменная в крайне извращённой форме":
PHP:
global $parser;
$newParser= new Parser;
$newParser->support= 'pupkin';
$oldParser= $parser;
$parser= $newParser;
$myObject = new PageController(); // этот объект использует парсер $parser с подставными значениями
$myObject->run();
$parser= $oldParser;