2016-03-14 5 views
0

Я использую статическую функцию php для создания экземпляра для SESSION.PHP Instance create Issue

Проблема при создании экземпляра объекта создается каждый раз при вставке данных.

Так что я не могу добавить несколько данных.

Если его больше, чем один, то существующие данные удаляются [Новый объект создан.]

МОЙ КОД:

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

Я хочу только один экземпляр для управления сеансом. Если я добавляю одновременно несколько элементов, то он сохраняет оба значения. Но если я добавляю один за другим, то существующий удаляется и создается новый объект. –

+0

Возможно, вы хотите создать класс для управления сеансами? –

+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" 
    } 
} 
+0

Здесь каждый раз, когда приходит новый запрос, статическая переменная «$ session» устанавливается в NULL. Создается новый объект. Так что новые Datas только хранятся и старые удаляются. –

+0

@ShankarThiyagaraajan, я ожидал, что ваш класс lShopSession обнаружит и восстановит фактический сеанс. В вашем вопросе не хватает кода, откройте/опубликуйте источник функций и исходных текстов 'lShopSession-> getSession()', которые возвращаются как результат из 'lShopSession-> getSession()' или 'lShopSession-> set()' source функции, вероятно, здесь есть ошибки. – Wizard