2009-03-02 4 views
2

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

ответ

5

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

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

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

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

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

0

Существует два способа использования моих приложений: сеансов и базы данных.

0

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

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

0

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

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

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

Смежные вопросы