Avatar billede lillebror Nybegynder
23. april 2006 - 10:51 Der er 7 kommentarer og
1 løsning

Unserialize singleton objekt

Hej Eksperter

Jeg har et problem med et singleton objekt jeg har. Jeg vil meget gerne gemme variablerne, når der forekommer et sideskift, hvorfor jeg serializer objektet og smider det i $_SESSION['objekt'], men når jeg så bruger unserialize($_SESSION['objekt']); så sker der ikke rigtig noget, af hvad jeg kan se.

Jeg har prøvet at smide den linie, hvor jeg inkluderer klassen, op før session_start(); men det havde ingen effekt. Er der en der kan fortælle mig, hvilken løsning der evt. ville virke?

Jeg kan ikke smide kode, for der er rigtig mange filer, og det ville blive for uoverskueligt. Jeg kunne evt. bruge et eksempel, der virker, hvor en singleton klasse bliver serialized og unserialized.
Avatar billede lillebror Nybegynder
23. april 2006 - 10:59 #1
Var, hvor serialize er blevet gemt, indeholder:
O:4:"cart":2:{s:4:"test";s:5:"Super";s:6:"aProds";a:4:{i:0;s:10:"superprod1";i:1;s:10:"superprod2";i:2;s:10:"superprod3";i:3;s:10:"superprod4";}}

Selve unserialize bliver udført:
cart Object ( [test] => Super [aProds] => Array ( [0] => superprod1 [1] => superprod2 [2] => superprod3 [3] => superprod4 ) )

Der bliver lavet print_r på arrayet aProds i objektet
Array ( )

Linien hvor objektet bliver gemt:
$_SESSION['cart'] = serialize(cart::getInstance());

og linien der printer det tomme array:
print_r(cart::getInstance()->aProds);
Avatar billede lillebror Nybegynder
23. april 2006 - 13:57 #2
Okay, nu er jeg ved at have forstået lidt mere. Hvis jeg skriver:
print_r($tester = unserialize($_SESSION['cart']));

Bliver mit objekt smidt i $tester variablen, men så er det bare ikke singleton længere. Nogen der ved hvordan jeg klarer den?
Avatar billede fangel Nybegynder
23. april 2006 - 16:46 #3
Lav det ala

class SingletonEksempel {
  static private $instance;
  private __construct() {
    // bah
  }
  public static getInstance() {
    if( !is_object( self::$instance ) ) {
      self::$instance = new SingletonEksempel();
    }
    return self::$instance;
  }
  public static setInstance(SingletonEksampel $instance) {
    self::$instance = $instance;
  }
}

// serialize
$serialize = serialize(SingletonEksempel::getInstance());

// unserialize
SingletonEksempel::setInstance( unserialize($serialize) );

Morten
Avatar billede fangel Nybegynder
23. april 2006 - 16:47 #4
okay - se bort fra stavefejl og forskellige stavninger af SingletonEksempel.. ;) men ja - konceptet holder...
Avatar billede lillebror Nybegynder
23. april 2006 - 19:42 #5
Mange tak fangel, nu virker det sq.
Jeg har ikke kunnet finde din side for rigtige eksperter, selvom jeg har forsøgt at google lidt :)
Avatar billede fangel Nybegynder
23. april 2006 - 20:13 #6
min mail står på min profil.. så kan du fange mig der (vil ik skrive navnet på E - folk skal ik beskylde mig for at stjæle brugere)

Morten
Avatar billede lillebror Nybegynder
09. maj 2006 - 20:47 #7
Du får lige tid til at svare, hvis du vil have point.
Har forresten fundet din side ;)
Avatar billede fangel Nybegynder
09. maj 2006 - 23:16 #8
ja, har ik brug for point - dem beholder du bare.. ;)

M
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Vil du være med til at opbygge og udvikle Forsvarets dronekapacitet?

AL Sydbank

AI Engineer

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer