Как я могу хранить класс объекта в сеансе в PHP?

Как я могу создать хранилище классов объектов в PHP-сессии, а затем получить его на моей следующей странице как переменную. Не могли бы вы помочь?

Вот мой класс.inc.php

class shop { var $shoeType; var $color; public function __construct() { $shoeTypeService = new ShoeTypeService(); $shoe = $shoeTypeService->getAllShoes(); $this->shoeType = $shoe[20]; } } 

Related of "Как я могу хранить класс объекта в сеансе в PHP?"

Когда вы создаете экземпляр класса, вы можете назначить его сеансу (при условии, что он запущен)

 $_SESSION['SomeShop'] = new Shop(); or $Shop = new Shop(); //stuff $_SESSION['SomeShop'] = $Shop; 

Имейте в виду, что везде, где вы обращаетесь к этому объекту, вам понадобится класс магазина.

этот первый код этого кода

 $obj = new Object(); $_SESSION['obj'] = serialize($obj); 

на второй странице

 $obj = unserialize($_SESSION['obj']); 

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

Расширение на ответ Джейкс. Это можно сделать с очень небольшими проблемами, как все в php. Вот тестовый пример:

 session_start(); $_SESSION['object'] = empty($_SESSION['object'])? (object)array('count' => 0) : $_SESSION['object']; echo $_SESSION['object']->count++; 

Он будет выводить количество, увеличенное на 1 при каждой загрузке страницы. Однако вам нужно быть осторожным, когда вы сначала инициируете переменную $ _SESSION, чтобы проверить, уже ли она установлена. Вы не хотите больше писать значение каждый раз. Поэтому обязательно выполните:

 if (empty($_SESSION['SomeShop'])) $_SESSION['SomeShop'] = new Shop(); 

или еще лучше:

 if (!$_SESSION['SomeShop'] instanceof Shop) $_SESSION['SomeShop'] = new Shop();