Объектно-ориентированное программирование на PHP: обновление убивает мои объекты - PullRequest
0 голосов
/ 17 февраля 2010

Я искал в PHP для ООП и кое-что заметил ... Объекты восстанавливаются каждый раз при обновлении страницы.Проблема состоит в том, что я хочу, чтобы объект сохранял определенную информацию в переменных класса в течение всего времени, пока кто-то находится на веб-сайте.кто-то занимается серфингом на сайте?

Какие есть альтернативы моей проблеме?

Было бы очень полезно иметь пример тоже!

Ответы [ 6 ]

7 голосов
/ 17 февраля 2010

Вы можете использовать Сеансы для хранения данных, связанных с одним пользователем, между различными страницами (цитирование) :

Поддержка сессий в PHP состоит из способ сохранить определенные данные через последующие обращения.

См. Раздел Обработка сеансов в руководстве, для получения дополнительной информации о сеансах.

6 голосов
/ 17 февраля 2010

PHP не с состоянием. Каждая загрузка страницы - одноразовое событие. Вы можете сохранять данные в сеансах или сохранять информацию в базе данных.

2 голосов
/ 17 февраля 2010
  1. PHP не заполнен, каждый запрос - это новый процесс на сервере

Лучше всего использовать данные сеанса и передавать данные сеанса объектам, когда вы их создаете. Пусть конструкторы извлекают данные, которые им нужны, из сеанса, и вы, по сути, получите необходимую полноту состояния.

Вы можете получить доступ, используя

$_SESSION['stuff'] = $data;

тогда вы можете использовать ваши объекты как $ x = новый DataStore ($ _ SESSION ['stuff']);

если в сеансе имеются данные, объект будет сам заполняться этими данными. В противном случае он по умолчанию будет использовать стандартную инициализацию.

2 голосов
/ 17 февраля 2010

PHP-скрипт должен завершиться, прежде чем apache сможет обслуживать страницу, поэтому, если вы действительно хотите это сделать, единственное, что вы можете сделать, это serialize и сохранить все объекты, которые вы хотите сохранить и использовать сессия куки для отслеживания пользователей

1 голос
/ 17 февраля 2010

СЕССИИ хороши, я использую их для хранения состояния объекта в некоторых моих программах на PHP.

Или лучшим решением было бы использовать Flex , чтобы вам не приходилось беспокоиться о протоколе HTTP без сохранения состояния ...

1 голос
/ 17 февраля 2010

Даже если такие подходы, как сериализация объектов и их десериализация, полезны, вы должны сначала убедиться, что понимаете, почему ваши объекты "исчезают".

HTTP, протокол, используемый для извлечения страниц и других ресурсов с веб-серверов, без состояний . По сути, это означает, что один запрос ничего не знает о другом запросе, даже если он поступил от того же пользователя. Подумайте об этом, когда вы запрашиваете страницу PHP, скрипт запускается и после его завершения Apache отправляет вам результат. Когда вы снова запрашиваете страницу, она делает то же самое, что и в первый раз. Это без гражданства.

Существуют методы, позволяющие сохранять состояние между запросами (чтобы они не забывали ваши объекты), включая такие, как файлы cookie или перезапись URL. Но при разработке веб-приложений необходимо учитывать природу HTTP (и, следовательно, вашего сценария PHP) без сохранения состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...