我正在使用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'
]
但是第一个被删除了。
针对此问题的任何解决方案......?
答案 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"
}
}