如何将对象类存储到PHP中的会话中?

时间:2011-04-07 09:12:11

标签: php

如何将对象类存储到PHP会话中,然后将其作为变量放在我的下一页中。你能帮忙吗?

这是我的class.inc.php

class shop {

var $shoeType;
var $color;

    public function __construct() {

        $shoeTypeService = new ShoeTypeService();
        $shoe = $shoeTypeService->getAllShoes();
        $this->shoeType = $shoe[20];
    }
}

4 个答案:

答案 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();