[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Зачем Singleton, когда есть Static
hailtothekingbaby
Здравствуйте.
Вопрос: какие возможности в PHP открываются при использовании singleton-класса по сравнению с использованием класса, где все поля и методы статические?


Доп. сведения:
Читал статьи типа "Static vs singleton". Но там приводят несущественные или даже несуществующие проблемы. Например, говорят, что в статическом классе нельзя хранить данные, тем не менее, ведь бывают статические поля.

Спасибо.



Спустя 14 минут, 46 секунд (12.10.2009 - 19:04) Oyeme написал(а):
Вот какие преимущества дает singleton pattern:

1. Мы используем ссылки на один и тот же экземпляр класса в разных частях проекта. Таким образом не нужно создавать новый объект каждый раз когда мы хотим воспользоваться каким-то методом — просто пользуемся ссылкой.
2. Теперь не нужно передавать объект как аргумент, чтоб все части программы были «в курсе» о текущем состоянии объекта. Все ссылки указывают на один объект.


Еще раз сформулируем суть singleton pattern: Убедиться, что существует только один экземпляр класса и обеспечить доступ к нему из любой части программы.

Спустя 13 минут, 32 секунды (12.10.2009 - 19:17) glock18 написал(а):
единственное существенное различие:
signleton - это объект.
static - нет.

плюсы того, что singleton объект неочевидны, на самом деле, но в пхп вплоть до версии 5.3 нельзя было играться со статикой при наследовании (класс всегда использовался тот, который указан при обращении, и никаких нормальных способов обратиться к константе потомка из метода родителя, предположим, не было).

в 5.3 такой проблемы уже нет.

ну и еще ряд небольших нюансов. больше эстетического толка (иногда удобнее работать с классами именно как с объектами). как вы правильно заметили, объяснение "в статическом классе нельзя хранить данные" абсолютно невернО.

как правило я использую статику в других случаях, а в подобных ситуациях синглтон, если класс представляет какую-то сущность (одиночную, разумеется), и статику, если класс представляет собой просто набор методов для обработки чего-либо, не определяя какую-либо логику

Спустя 1 минута, 13 секунд (12.10.2009 - 19:19) glock18 написал(а):
Oyeme
ты перечислил различия синглтона и обычного объекта. статика вообще не подразумевает создание объекта smile.gif

Спустя 30 минут, 46 секунд (12.10.2009 - 19:49) Oyeme написал(а):
Цитата (glock18 @ 12.10.2009 - 16:19)
Oyeme
ты перечислил различия синглтона и обычного объекта. статика вообще не подразумевает создание объекта smile.gif

Я перечислил плюсы силигтона,про статический класс я ничего не сказал.
Я не люблю их.

Я за динамичность. smile.gif

Спустя 24 минуты, 45 секунд (12.10.2009 - 20:14) glock18 написал(а):
Цитата
Я за динамичность.

статические методы и члены бывают очень полезны. жаль нормальная поддержка появилась только в 5.3. так что теперь придется хостеров везде пинать, чтобы мои программерские капризы бросились исполнять smile.gif

Спустя 18 часов, 36 минут, 59 секунд (13.10.2009 - 14:51) hailtothekingbaby написал(а):
Oyeme,

спасибо.


А про проблемы со статическими методами и наследованием, с этим я уже успел столкнуться) и проект, над которым я сейчас работаю, начал писаться на пятом php, но ниже чем 5,3. пишется уже долго, так что лучше уже ниче не менять)
Вообще, я заметил, разработчики php любят огорчать программистов)

Спустя 1 час, 11 минут, 44 секунды (13.10.2009 - 16:03) glock18 написал(а):
hailtothekingbaby
Цитата
Вообще, я заметил, разработчики php любят огорчать программистов)

последнее время они очень радуют, надо сказать smile.gif

огорчают тех, кто не может перейти на новые версии smile.gif
Быстрый ответ:

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