Объектно-ориентированное программирование с помощью PHP:Обновление Убивает мои Объекты

StackOverflow https://stackoverflow.com/questions/2277173

  •  21-09-2019
  •  | 
  •  

Вопрос

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

  1. Есть ли какой-то способ поддерживать объект в рабочем состоянии все время, пока кто-то просматривает веб-сайт?
  2. Какие существуют альтернативы моей проблеме ?

Было бы действительно полезно иметь пример тоже!

Это было полезно?

Решение

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

Другие советы

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

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

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

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

  1. PHP не имеет состояния, каждый запрос - это новый процесс на сервере

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

вы можете получить доступ к сеансу, используя

$_SESSION['stuff'] = $data;

затем вы можете использовать свои объекты следующим образом $ x = новое хранилище данных($_SESSION['stuff']);

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

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

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

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

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

Или лучшим решением было бы использовать Гибкий таким образом, вам не нужно беспокоиться о HTTP-протоколе без состояния...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top