如何将对象类存储到PHP会话中,然后将其作为变量放在我的下一页中。你能帮忙吗?
这是我的class.inc.php
class shop {
var $shoeType;
var $color;
public function __construct() {
$shoeTypeService = new ShoeTypeService();
$shoe = $shoeTypeService->getAllShoes();
$this->shoeType = $shoe[20];
}
}
答案 0 :(得分:9)
实例化类后,您可以将其分配给会话(假设它已启动)
$_SESSION['SomeShop'] = new Shop();
or
$Shop = new Shop();
//stuff
$_SESSION['SomeShop'] = $Shop;
请记住,无论您在何处访问该对象,都需要包含商店类。
答案 1 :(得分:7)
使用此代码 第一页
$obj = new Object();
$_SESSION['obj'] = serialize($obj);
第二页
$obj = unserialize($_SESSION['obj']);
答案 2 :(得分:2)
您不能简单地将对象实例存储到会话中。否则,对象将不会在您的下一页中正确显示,并且将是__PHP_Incomplete_Class的实例。 为此,您需要在第一次调用中serialize您的对象,并在下次调用中unserialize它们,以使对象定义和结构完整无缺。
答案 3 :(得分:0)
扩展Jakes回答它可以像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();