![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| v00d00 |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
Доброго времени
Есть класс
Как видим это синглтон. Используется он так:
Вопрос: как долго на вебсервере будет висеть инстанс класса? |
||||
|
|||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
Как только скрипт закончит работу, сборщик мусора выкинет инстанс
|
|||
|
||||
| Simpliest |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
Если нужно долго висеть, то возможно подойдет паттерн Registry А в ZF можно посмотреть на его имплеменатцию http://framework.zend.com/manual/en/zend.registry.html |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Вот только в случае с коннектом к бд никакой паттерн не поможет.
Подключаться придется заново в любом случае |
|||
|
||||
| v00d00 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
А по какому принципу действует сборщик?
Ведь у меня по идее должна хранится ссылка на объект в статическом поле класса, хотя бы по этому он не может его удалить. Или парсер PHP будет каждый раз открывать файл через
и создавать новый инстанс? А старый следовательно удалять? Добавлено через 4 минуты Кстати класс этот обертка вокруг INI файла(как вы видели). Просто хранит в себе считанные данные. Собственно вопрос и возник потому что использование синглтонов в PHP кажется сомнительным удовольствием. Это сообщение отредактировал(а) v00d00 - 18.9.2009, 15:32 |
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
v00d00, хранит все инстансы только во время генерации ответа на запрос. Паттерн синглетон не предзназначен для передачи инстанса между сессиями запросов. Как только сервер сгенерировал ответ, скрипт отработал, сборщик мусора удалит из памяти все ссылки на синглетон и сам инстанс
|
|||
|
||||
| v00d00 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
Пичаль. Сохраню настройки в пхп файл и буду инклюдить его как есть...
|
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
v00d00, есть другой вариант, perl и java (на сколько я знаю) поступают наоборот, именно так как тебе надо
Добавлено через 54 секунды v00d00, если уж так надо сохранять синглетон - var_export в помощь |
|||
|
||||
| Simpliest |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
Singletone гарантирует что при работе скрипта будет только 1 инстанс класса. Но скрипт у тебя завершается отдав данные, а работа приложения еще не завершена. Это особенность веб-приложений - они растянуты/разорваны в пространстве и времени. Т.е., когда произойдет следующий вызов скрипта(обращение к конкретному url) и какой именно скрипт будет вызван, мы не можем сказать со 100%й вероятностью. Поэтому для корректной работы нам надо хранить "состояния" приложения. Вот для хранения состояний между запросами/обращениями и используется Registry (в который ты, кстати, можешь сохранить и свой инстанс Singletone) P.S. Состояния можно хранить и в URL, и в hidden полях на страницах, и в базе/файле на сервере - это уже особенности реализации Это сообщение отредактировал(а) Simpliest - 18.9.2009, 16:16 |
|||
|
||||
| NewDima |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
Для меня откровение Добавлено через 6 минут и 6 секунд И по-моему не правда Перечитал еще раз полность о ZendRegistry, ничего подобного не нашел, только это (что в начале):
|
||||
|
|||||
| Simpliest |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
||||
|
||||
| v00d00 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
На самом деле просто хотелось применить паттерн на практике. Проблема решается намного проще (и по реализации и по скорости выполнения) инклудом настроек.
Офтопик: Registry - это часть поставки Зенда? ( как тогда там реализован хранение данных между ответами ?) |
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
Никак, выражаясь языком Simpliest, это глупость
|
|||
|
||||
| Simpliest |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
Registry - это паттерн. Он ничей Я просто дал, как образец, ссылку на его реализацию в ZF http://framework.zend.com/manual/en/zend.registry.html |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Для меня тоже. Не вижу, что бы в Zend_Registry где-то сохранялось состояние объекта между сессиями и потом ресторилось. Да и нет там такого. -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| v00d00 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
Если рассматривать Реестр просто как паттерн он точно также будет каждый раз заново создавать объекты для каждой сессии( или я что-то упустил). Я думал есть реализация на PHP которая как раз решает техническую проблему хранения объектов избегая сборки мусора.
|
|||
|
||||
| Simpliest |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
Блин, сходите по ссылкам, там все написано даже с примерами и у вас не будет глупых домыслов.
В скрипте vasya.php Создали объект и сохранили
В скрипте petya.php Прочитали
Это у нас новый объект? Или старый? |
||||
|
|||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Такого средства нету. Если подумать, php-срипт, неважно, запустился из консоли или исполнился как FCGI, по завершении работы ему состояний в памяти не сохранить, поскольку он отработал и выгрузился. Разве что Apache и mod_php могут предоставить такой функционал, но это все равно будет костылем. Добавлено через 1 минуту и 29 секунд Simpliest, ключевое слово
Уж наверное до file/shared memory/memcached/db сохранения мы додумались бы? -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| v00d00 |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
Новый. При дисериализации будет вызван конструктор класса. Добавлено через 1 минуту и 20 секунд
Сорь. Очень скудный опыт веб разработки) |
||||||||
|
|||||||||
| Simpliest |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
Точно? А то как-то вы хотите конкретной реализации прямо от паттернов. Паттерн - это не более чем подход/методика/алгоритм. Добавлено через 8 минут и 34 секунды Да ну? Вы меня радуете.... Выполните два скрипта test.php и потом test2.php test.php
test2.php
sample.php
some.txt
Посмотрите на вывод скриптов и застрелитесь. |
||||||||||
|
|||||||||||
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 12 Всего: 43 |
memcached/etc
Не забывайте юзать мьютексы при работе с данными из кэша. |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Лично я - ничего не хочу. Я лишь сказал, что способа перекинуть объект не разрушая его между сессиями - нету. От паттернов тем более ничего не жду, я их использую где они нужны и все. -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: 6 Всего: 16 |
||||
|
||||
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 12 Всего: 43 |
|
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
ну, речь здесь, наверное, не о куче проектов, а об одном конкретном
|
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |