![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
||
|
MoLeX |
|
||||||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
Добрый день.
Есть несколько способов создание Singletonа 1. Singleton
2. Singleton
Но помимо тех способах, есть еще: 3. Singleton
Кто какой использует и почему? Добавлено через 39 секунд P.S. Навеяно обсуждением на хабре -------------------- Amazing ![]() |
||||||
|
|||||||
Shogun |
|
|||
![]() сёгун-сан ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 8.6.2006 Где: Кишинёв Репутация: 9 Всего: 11 |
Второй, намного удобнее, но есть и нюансы.
-------------------- 2b || !2b |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
У меня почему-то получается третий. Он как-то ближе к PHP. Не в каждом языке можно писать скрытые глобальные переменные
![]() К тому-же по эффективности третий способ проигрывает только явным глобальным переменным. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Muerto |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
Из тех вариантов что выше 2ой предпочитаю...
Это сообщение отредактировал(а) Muerto - 9.2.2011, 19:06 |
|||
|
||||
Dima 2015 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 16.3.2008 Где: SPb Репутация: 2 Всего: 2 |
Очень интересная тема. Сразу скажу, я не очень силен в ООП, но синглетон как раз пытаюсь использовать. Судя по предложенному коду я использую 1й. И у меня возник вопрос как вообще применяются 2 и 3 способы?
Способ 2 - это класс, который должен реализовывать синглетон наследуется от класса Singleton? А как быть если нужный класс должен быть унаследован еще от чего-нибудь, например от абстрактного юзера. Ведь в пхп нет множественного наследования... Способ 3 - это что-то типа фабрик для объектов класса? Но тогда, раз мы можем написать $obj[$class] = new $class(); - то какой же это к черту синглетон. Если можно написать new $class - значит у него конструктор открыт..? Проясните если несложно для начинающего разбираться в ООП ![]() Это сообщение отредактировал(а) Dima 2015 - 9.2.2011, 19:13 |
|||
|
||||
Shogun |
|
||||||
![]() сёгун-сан ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 8.6.2006 Где: Кишинёв Репутация: 9 Всего: 11 |
Этот способ что-то вроде гибрида между factory и registry и в стиле пхп4 =))
Это сообщение отредактировал(а) Shogun - 9.2.2011, 21:30 -------------------- 2b || !2b |
||||||
|
|||||||
Dima 2015 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 16.3.2008 Где: SPb Репутация: 2 Всего: 2 |
Shogun, понял спасибо. Все как я и думал.
|
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
ksnk, тоже использую третий.
1 и 2 не понравились результатами теста, к ф-ции доступ всегда быстрее. Причем для второго способа надо PHP >= 5.3, из-за
-------------------- Amazing ![]() |
|||
|
||||
SneG0K |
|
|||
![]() Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 7 Всего: 54 |
Первый, иногда нужен конструктор
Добавлено через 1 минуту и 9 секунд И второй работает только по-моему начиная с 5.3 |
|||
|
||||
Dima 2015 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 16.3.2008 Где: SPb Репутация: 2 Всего: 2 |
MoLeX,
неужели это может быть ощутимо? Ну в плане нагрузки на сервер в посещаемом проекте.. |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
может)
-------------------- Amazing ![]() |
|||
|
||||
Shogun |
|
||||
![]() сёгун-сан ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 8.6.2006 Где: Кишинёв Репутация: 9 Всего: 11 |
вроде так...
-------------------- 2b || !2b |
||||
|
|||||
Dima 2015 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 16.3.2008 Где: SPb Репутация: 2 Всего: 2 |
MoLeX, сталкивался? Просто сразу тут возникает вопрос что за проект, как написан, какая посещаемость, какие сервера... а то все эти разговоры в пользу бедных. Я с трудом вообще представляю проект где сами пыхофункции будут тормозить...
Ну т.е. время работы самого пхп относительно времени получения данных с диска и вывода этих данных в браузер, оно обычно раз в 10 меньше. Т.е. у нас 0,001 сек выполняется пхп и 0,01 сек получаются данные из БД и выводятся в браузер (echo может быть долгим, ага). Так вот, ну выйграем мы 0.0005 сек за счет использования ф-ций вместо классов, вот радость то... Это сообщение отредактировал(а) Dima 2015 - 11.2.2011, 16:39 |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
Dima 2015, все зависит от самого приложения. У нас очень много классов, при чем есть очень прожорливые классы. По тестам для нас выгодно использовать ф-цию, что мы и делаем
-------------------- Amazing ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |