PHP实例创建问题

时间:2016-03-14 05:37:29

标签: php session

我正在使用php静态函数为SESSION创建实例。

问题是,每次插入数据时都会创建对象的实例。

所以我不能添加多个数据。

如果它不止一个,则删除现有数据[New Object Created。]

我的代码:

private static $session;

public static function startSession(array $config = array())
{
    if (self::$session == null) {
        self::$session = new lShopSession();
        self::$session = self::$session->getSession();
    }
    dd(self::$session);
    return self::$session;
}

function test()
{

    $lshop = self::startSession();
    $lshop->set('name', 'xxxx');
    $lshop = self::startSession();
    $lshop->set('name2', 'yyyy');

    dd(self::startSession());

}

我的输出:

[
  'name2' => 'yyyy'
]

但是第一个被删除了。

针对此问题的任何解决方案......?

1 个答案:

答案 0 :(得分:1)

也许这不是答案,但我无法在评论中正确格式化此代码,sry。

我实际上并不知道你的lShopSession类和dd()函数中发生了什么,但这里有一个简单的例子,可行(我试图让这段代码更简单,更接近我可以原创):

  

当然它不是生产代码,这里是单连接测试,没有实际的会话检测

<?php

class TestSession {
    public $data;

    // here is no code that restore session for user

    public function set($key, $val) {
        $this->data[$key] = $val;
    }
}

class TestManager {
    private static $session = null;

    public static function startSession() {
        if (is_null(self::$session)) {
            self::$session = new TestSession;
        }
       return self::$session;
    }

    public function test() {
        $l = self::startSession();
        $l->set('name', 'val');

        $l = self::startSession();
        $l->set('name2', 'val2');

        var_dump(self::startSession());
    }
}

$a = new TestManager;
$a->test();

结果:

class Session#2 (1) {
  public $data =>
  array(2) {
    'name' =>
    string(3) "val"
    'name2' =>
    string(4) "val2"
  }
}