PHP 实例创建问题


PHP Instance create Issue

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

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

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

如果有多个,则删除现有数据[已创建新对象。

我的代码:

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'
]

但是第一个被删除了。

这个问题有什么解决方案吗?

也许这不是答案,但我无法在注释中正确格式化此代码,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"
  }
}