Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как часто использовать синглтоны


Автор: ArNic 2.8.2012, 17:54
В моем фреймворке-"велосипеде" есть классы, относящиеся к ядру. К этим классам из других классов как 
Код

global $c_db; 
$c_db->show($id);


Пришло время поменять кой чего в структуре для 5.3. Заодно решил заюзать сингтоны, которые уже давно пользуют другие программисты. И чем больше я читаю, тем больше убеждаюсь (например http://developer.co.ua/posts/view/singleton_pattern_v_php) что сингтоны нужны для: 
  • инициализации класса (сейчас решается инициализацией класса в переменную в начале файла с классом)
  • обращения к нему откуда угодно (аналог global)
  • не заботиться о его инициализации (в обычной жизни решает auto_load и include_once вкупе с инициализацией в начале файла с классом)
  • не боятся, что глобальная пременная с инициализированным классом будет подменена (этого я не боюсь)
И встают вопросы:
  • когда его разумно применять (при условии что я точно знаю, что несколько раз класс не надо будет инициализировать)?
  • если его завязать на функцию __call будет ли вернее c_db::show($id), чем обращаться как c_db::instance()->show($id)?

Автор: baldina 2.8.2012, 20:59
вообще-то синглтон это подпорка. в мире (в т.ч. компьютерном) почти нет вещей, присутствующих в единственном экземпляре.
синглтон суть аналог global, поэтому неудобен для расширения проекта.
как некое техническое решение (например, однократной инициализации) то почему бы нет. главное не злоупотреблять.
впрочем, в программировании для web свои особенности, здесь синглтоны чаще уместны чем, скажем, в десктоптном приложении.
Цитата(ArNic @  2.8.2012,  17:54 Найти цитируемый пост)
когда его разумно применять

перефразируя классика
Цитата

если можете не употреблять, не употребляйте.

Цитата(ArNic @  2.8.2012,  17:54 Найти цитируемый пост)
c_db::show($id) vs c_db::instance()->show($id)

принципиальной разницы восприятия нет

Автор: ArNic 2.8.2012, 21:16
Еще один вопрос. Что лучше работа  ядром через синглтоны или реестр? Имеется ввиду ядро фреймворка

Автор: baldina 3.8.2012, 11:33
что подразумевается под реестром?

Автор: Fortop 3.8.2012, 15:30
паттерн Registry видимо

Автор: baldina 3.8.2012, 15:44
так он и есть синглтон

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)