Объектно-ориентированное программирование с помощью PHP:Обновление Убивает мои Объекты
-
21-09-2019 - |
Вопрос
Я покопался в PHP на предмет ООП и кое-что заметил...Объекты создаются повторно при каждом обновлении страницы.Проблема в том, что я хочу, чтобы объект сохранял определенную информацию в переменных класса в течение всего времени, пока кто-то находится на веб-сайте.
- Есть ли какой-то способ поддерживать объект в рабочем состоянии все время, пока кто-то просматривает веб-сайт?
- Какие существуют альтернативы моей проблеме ?
Было бы действительно полезно иметь пример тоже!
Решение
PHP не отслеживает состояние.Каждая загрузка страницы - это одноразовое событие.Вы можете сохранять данные с помощью сеансов или путем сохранения информации в базе данных.
Другие советы
Вы можете использовать Сеансы чтобы сохранить данные, связанные с одним пользователем, между разными страницами (цитирую) :
Поддержка сеансов в PHP состоит из способа сохранения определенных данных при последующих обращениях.
Смотрите на Обработка сеанса раздел руководства для получения дополнительной информации о сеансах.
PHP-скрипт должен завершиться, прежде чем apache сможет обслуживать страницу, поэтому, если вы действительно хотите это сделать, вы можете сделать следующее сериализовать и сохраните все объекты, которые вы хотите сохранить и использовать сессия файлы cookie для отслеживания пользователей
- PHP не имеет состояния, каждый запрос - это новый процесс на сервере
Лучше всего использовать данные сеанса и передавать данные сеанса объектам при их создании.Попросите конструкторов извлечь нужные им данные из сеанса, и вы, по сути, получите необходимую полноту состояния.
вы можете получить доступ к сеансу, используя
$_SESSION['stuff'] = $data;
затем вы можете использовать свои объекты следующим образом $ x = новое хранилище данных($_SESSION['stuff']);
если в сеансе есть данные, объект будет заполнять себя из этих данных.В противном случае он будет использовать по умолчанию свой стандартный init.
Даже когда полезны такие подходы, как сериализация объектов с последующей их десериализацией, вы должны сначала убедиться, что понимаете почему ваши объекты "исчезают".
HTTP, протокол, используемый для извлечения страниц и других ресурсов с веб-серверов, является без гражданства.По сути, это означает, что один запрос ничего не знает о другом запросе, даже если он пришел от того же пользователя.Подумайте об этом так: когда вы запрашиваете свою PHP-страницу, скрипт запускается, и после его завершения Apache отправляет вам результат.Когда вы снова запрашиваете страницу, она делает то же самое, как если бы вы сделали это в самый первый раз.Это апатриды.
Существуют методы сохранения состояния между запросами (чтобы не забыть ваши объекты), и они включают в себя такие вещи, как файлы cookie или перезапись URL.Но вы должны иметь в виду природу HTTP без состояния (и, следовательно, вашего PHP-скрипта) при разработке веб-приложений.
СЕАНСЫ хороши, я использую их для сохранения состояния объекта в некоторых моих PHP-программах.
Или лучшим решением было бы использовать Гибкий таким образом, вам не нужно беспокоиться о HTTP-протоколе без состояния...