Хранение PHP-объектов - PullRequest
2 голосов
/ 02 марта 2009

Допустим, в моем приложении у меня есть экземпляр объекта, созданный на странице 1. Затем пользователь переходит в какую-то другую часть приложения, и я хочу, чтобы экземпляр остался. Как я могу «сохранить» экземпляр? Сессии?

Ответы [ 4 ]

5 голосов
/ 02 марта 2009

Да, используйте сеанс .

Вызовите session_start () в начале вашей страницы, затем сохраните свой объект с чем-то вроде $_SESSION['myobject']=$myobject;

Более поздняя страница может получить доступ к $_SESSION['myobject'] после того, как она тоже вызовет session_start ()

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

Ваш класс также может определять магические методы __ sleep и __ wakeup , которые позволяют очищать любые переменные-члены, которые вы не хотите сериализовать (например, ресурсы, такие как дескрипторы db) , Во время __wakeup вы можете восстановить их.

0 голосов
/ 02 марта 2009

У вас есть два основных варианта: Состояние на стороне сервера или Состояние на стороне клиента .

Состояние на стороне сервера обычно выполняется через сеансы. Это самое простое и мощное решение, но оно имеет некоторые недостатки (параллелизм, невозможность сохранения состояния во времени и т. Д.).

Состояние на стороне клиента может поддерживаться через URL - обычно в параметрах строки запроса. Например, чтобы «запомнить» переменную $name между двумя страницами, вы можете создать ссылку на первую страницу, например: http://www.example.org/second_page.php?name=Jimbo, и вторая страница может затем получить переменную через $_GET. Это намного сложнее понять, и у него есть некоторые ограничения на то, сколько состояний вы можете передавать между страницами. По этой причине люди склонны переходить с состояния на стороне сервера, даже когда состояние на стороне клиента будет более подходящим.

0 голосов
/ 02 марта 2009

Сеансы да, но это будет новый экземпляр с теми же свойствами, а не тот же экземпляр. Другие варианты - использовать O / R-Mapper для хранения объекта в БД и сохранить ключ для него в сеансе, или использовать memcached с уникальным ключом (скажем, ID сеанса) - но это все равно не будет тот же экземпляр - просто экземпляр с такими же свойствами.

Если вам нужен точно такой же экземпляр объекта между двумя запросами в PHP, я боюсь, что это невозможно (не невозможно , все выполнимо - но у вас будет запустить PHP поверх какого-либо типа сервера приложений)

0 голосов
/ 02 марта 2009

Для своих приложений я использовал два способа: сессии и базы данных.

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