Вопрос: какие возможности в PHP открываются при использовании singleton-класса по сравнению с использованием класса, где все поля и методы статические?
Доп. сведения:
Читал статьи типа "Static vs singleton". Но там приводят несущественные или даже несуществующие проблемы. Например, говорят, что в статическом классе нельзя хранить данные, тем не менее, ведь бывают статические поля.
Спасибо.
Спустя 14 минут, 46 секунд (12.10.2009 - 19:04) Oyeme написал(а):
Вот какие преимущества дает singleton pattern:
1. Мы используем ссылки на один и тот же экземпляр класса в разных частях проекта. Таким образом не нужно создавать новый объект каждый раз когда мы хотим воспользоваться каким-то методом — просто пользуемся ссылкой.
2. Теперь не нужно передавать объект как аргумент, чтоб все части программы были «в курсе» о текущем состоянии объекта. Все ссылки указывают на один объект.
Еще раз сформулируем суть singleton pattern: Убедиться, что существует только один экземпляр класса и обеспечить доступ к нему из любой части программы.
1. Мы используем ссылки на один и тот же экземпляр класса в разных частях проекта. Таким образом не нужно создавать новый объект каждый раз когда мы хотим воспользоваться каким-то методом — просто пользуемся ссылкой.
2. Теперь не нужно передавать объект как аргумент, чтоб все части программы были «в курсе» о текущем состоянии объекта. Все ссылки указывают на один объект.
Еще раз сформулируем суть singleton pattern: Убедиться, что существует только один экземпляр класса и обеспечить доступ к нему из любой части программы.
Спустя 13 минут, 32 секунды (12.10.2009 - 19:17) glock18 написал(а):
единственное существенное различие:
signleton - это объект.
static - нет.
плюсы того, что singleton объект неочевидны, на самом деле, но в пхп вплоть до версии 5.3 нельзя было играться со статикой при наследовании (класс всегда использовался тот, который указан при обращении, и никаких нормальных способов обратиться к константе потомка из метода родителя, предположим, не было).
в 5.3 такой проблемы уже нет.
ну и еще ряд небольших нюансов. больше эстетического толка (иногда удобнее работать с классами именно как с объектами). как вы правильно заметили, объяснение "в статическом классе нельзя хранить данные" абсолютно невернО.
как правило я использую статику в других случаях, а в подобных ситуациях синглтон, если класс представляет какую-то сущность (одиночную, разумеется), и статику, если класс представляет собой просто набор методов для обработки чего-либо, не определяя какую-либо логику
signleton - это объект.
static - нет.
плюсы того, что singleton объект неочевидны, на самом деле, но в пхп вплоть до версии 5.3 нельзя было играться со статикой при наследовании (класс всегда использовался тот, который указан при обращении, и никаких нормальных способов обратиться к константе потомка из метода родителя, предположим, не было).
в 5.3 такой проблемы уже нет.
ну и еще ряд небольших нюансов. больше эстетического толка (иногда удобнее работать с классами именно как с объектами). как вы правильно заметили, объяснение "в статическом классе нельзя хранить данные" абсолютно невернО.
как правило я использую статику в других случаях, а в подобных ситуациях синглтон, если класс представляет какую-то сущность (одиночную, разумеется), и статику, если класс представляет собой просто набор методов для обработки чего-либо, не определяя какую-либо логику
Спустя 1 минута, 13 секунд (12.10.2009 - 19:19) glock18 написал(а):
Oyeme
ты перечислил различия синглтона и обычного объекта. статика вообще не подразумевает создание объекта
ты перечислил различия синглтона и обычного объекта. статика вообще не подразумевает создание объекта
Спустя 30 минут, 46 секунд (12.10.2009 - 19:49) Oyeme написал(а):
Цитата (glock18 @ 12.10.2009 - 16:19) |
Oyeme ты перечислил различия синглтона и обычного объекта. статика вообще не подразумевает создание объекта |
Я перечислил плюсы силигтона,про статический класс я ничего не сказал.
Я не люблю их.
Я за динамичность.
Спустя 24 минуты, 45 секунд (12.10.2009 - 20:14) glock18 написал(а):
Цитата |
Я за динамичность. |
статические методы и члены бывают очень полезны. жаль нормальная поддержка появилась только в 5.3. так что теперь придется хостеров везде пинать, чтобы мои программерские капризы бросились исполнять
Спустя 18 часов, 36 минут, 59 секунд (13.10.2009 - 14:51) hailtothekingbaby написал(а):
Oyeme,
спасибо.
А про проблемы со статическими методами и наследованием, с этим я уже успел столкнуться) и проект, над которым я сейчас работаю, начал писаться на пятом php, но ниже чем 5,3. пишется уже долго, так что лучше уже ниче не менять)
Вообще, я заметил, разработчики php любят огорчать программистов)
спасибо.
А про проблемы со статическими методами и наследованием, с этим я уже успел столкнуться) и проект, над которым я сейчас работаю, начал писаться на пятом php, но ниже чем 5,3. пишется уже долго, так что лучше уже ниче не менять)
Вообще, я заметил, разработчики php любят огорчать программистов)
Спустя 1 час, 11 минут, 44 секунды (13.10.2009 - 16:03) glock18 написал(а):
hailtothekingbaby
Цитата |
Вообще, я заметил, разработчики php любят огорчать программистов) |
последнее время они очень радуют, надо сказать
огорчают тех, кто не может перейти на новые версии