web-dev-qa-db-fra.com

Impossible de stocker un objet dans une session Joomla

J'essaie de stocker un objet dans la session Joomla et il est réinitialisé lorsque j'annule la variable temporaire.

$whoami = new stdClass();
$whoami->type = 's'; $whoami->id = '1';

//Loading the value to session
$session->set('whoami',$whoami);

//Getting the session value to a temp variable
$temp = $session->get('whoami');
print_r($temp); //This prints correct as [type] => s [id] => 1
var_dump($temp);    

//Set the temp id to null
$temp->id = null;

//Again get the value from session
$test1 = $session->get('whoami');
print_r($test1);  // [type] => s [id] => 
var_dump($test1);   

var_dump de $temp et $test1 est comme ci-dessous

$ temp

object(stdClass)#193 (2) {
  ["type"]=>
  string(1) "s"
  ["id"]=>
  string(1) "1"
}

$ test1

object(stdClass)#193 (2) {
  ["type"]=>
  string(1) "s"
  ["id"]=>
  NULL
}

L'affectation de la valeur null à l'id temporaire réinitialise la valeur dans la variable de session ... a l'air bizarre ...

Puis-je avoir une aide s'il vous plait.

6
Malaiselvan

C'est simple, votre var $ temp est une référence de l'objet session. Donc, si vous modifiez le contenu de l'objet, vous modifiez l'objet de session lui-même.

Vous devez cloner l'objet:

$temp = clone $session->get('whoami');

ou vous créez un nouvel objet:

$temp = new stdClass();
$temp->type = $session->get('whoami')->type;
$temp->id = $session->get('whoami')->id;

Votre var dump devrait ressembler à ceci maintenant:

stdClass Object
(
    [type] => s
    [id] => 1
)
object(stdClass)#42 (2) {
  ["type"]=>
  string(1) "s"
  ["id"]=>
  string(1) "1"
}
1stdClass Object
(
    [type] => s
    [id] => 1
)
object(stdClass)#812 (2) {
  ["type"]=>
  string(1) "s"
  ["id"]=>
  string(1) "1"
}

Informations complémentaires:

Références aux objets du manuel PHP

Clonage d'objet manuel PHP

4
Dennis Heiden