Avatar billede lillebror Nybegynder
18. april 2006 - 13:36 Der er 12 kommentarer og
1 løsning

Webshop med singleton

Hej Eksperter

Jeg skal have bygget en webshop, og jeg har fundet frem til, at er mest hensigtsmæssigt at designe koden efter singleton. Jeg har dog aldrig arbejdet med singleton før, og ville derfor gerne henvises til nogle gode tutorials på nettet, og evt. nogle bøger som behandler singleton i PHP, gerne en bog der opbygger en webshop vha. singleton.
Avatar billede net-base.dk Nybegynder
18. april 2006 - 14:22 #1
Lytter lige med... har aldrig hørt om Singleton så vil da godt lige vide hvad det er...
Avatar billede sone Nybegynder
18. april 2006 - 15:49 #2
Avatar billede fangel Nybegynder
18. april 2006 - 16:08 #3
Jeg tror altså du har fanget noget forkert, hvis du tror man kan lave en hel webshop via singleton.

Singleton kan bruges hvis du har en specifik klasse du skal bruge en, og aldrig mere end en, instance (og denne skal være den samme) af mange forskellige steder omkring i et script (og vil have en global måde at tilgå denne instance på)..
Altså ikke om et helt koncept. Singleton skal bruges på kasse-niveau, ikke applikations-niveau.

Hvis du vil vide meget om forskellige design-patterns så er der en bog der bare hedder "Design Patterns" skrevet af 4 forfattere (kan ik huske deres navne, bogen ligger derhjemme) der omhandler ~20 forskellige design-patterns på et teoretisk niveau.. meget tung med rigtig brugbar .. (dog er eksempler i C++ og Smalltalk, så man skal kunne lidt "generel" programmering, ikke "kun" php..)

--

En simpel Singleton i PHP kan se ud som denne

class SingletonExample {
  private static $instance;
  private __construct() {
    // constructor
  }
  public static instance() {
    if(!is_object(this::$instance)) {
      this::$instance = new SingletonExample();
    }
    return this::$instance;
  }
}

Som giver dig en Singleton, hvor du kan have en konstant, og aldrig mere end en, instance af den selv, og en global "point of entry" til den, nemli den statiske instance() methode..

Morten
Avatar billede jensgram Nybegynder
18. april 2006 - 16:21 #4
"Design Patterns" som Morten omtaler er skrevet af Gamma, Helm, Johnson og Vlissides, og er en klassiker. Den betegnes under tiden "GoF"-bogen for Gang-of-Four.
Avatar billede lillebror Nybegynder
18. april 2006 - 16:30 #5
Morten

Jeg er klar over at singleton foregår i klasser, og ikke applikationer. Samtidig ved jeg også at det er noget med, når en klasse kun skal være tilgængelig i en enkelt instance uanset hvor meget man skriver $blah = new klasse;

Mit primære problem er at finde ud af, hvordan singleton hjælper mig med at lave et en webshop. Jeg kan jo sagtens lave noget kode, hvor jeg gemmer nogle varenumre og nogle styktal i en session variabel, men der må være en årsag til, at singleton anbefales til at skrive klassen, men jeg har også læst et sted, at man ikke kan gemme objekter i session variablen, hvorfor jeg har lidt svært ved at forestille mig, hvordan jeg skal gribe opgaven an.
Avatar billede fangel Nybegynder
18. april 2006 - 17:36 #6
jensgram: Ja, det var dem, ja det var ;) (og den er faktisk god)

lillebror: Du kan sagtens en instance af en klasse i session-variablen.. Du skal dog nok køre den igennem serialize() før du gemmer, og unserialize() før du skal bruge den på en anden side...
http://php.net/serialize og http://php.net/unserialize

Morten
Avatar billede lillebror Nybegynder
18. april 2006 - 17:51 #7
Arh ja, serialize, har indtil videre kun brugt den på arrays.

Ville du så lave en webshop som en singleton klasse, hvorefter du serializer den i en session variabel, der videreføres for hvert sideskift, og så har en du variabel i objektet med bestilte produkter og antal stk? Eller er dette ikke den mest hensigtsmæssige måde?
Avatar billede fangel Nybegynder
18. april 2006 - 17:59 #8
Hmm, igen vil jeg brokke mig lidt over at kalde det "en webshop via singleton"..

Der er klart ting _i_ en webshop der kunne drage nytte af en Singleton, fx indkøbs-kurven således at man kunne lave fx:
Cart::instance()->addProduct($product);

Morten
Avatar billede lillebror Nybegynder
18. april 2006 - 18:28 #9
Ja, jeg tror jeg forstår hvad du mener. Du kan vist godt oprette et svar, nu har jeg i hvert fald noget at arbejde videre ud fra. Så må jeg se, om jeg ikke kan finde en tutorial et eller andet sted, som jeg kan knytte sammen med det her.
Avatar billede fangel Nybegynder
18. april 2006 - 18:52 #10
Pyt skidt, behold du bare dem. Jeg er her så sjællent og har i forvejen så mange point at jeg ik har brug for flere.. ;)

Jeg kigger kun forbi spørgsmål når der i php-kategorien kommer noget mere "interesant" som fx Singleton spørgsmål... (og så Eksperten: Fejl, men det har en helt anden forklaring - som du nok kan finde ud af hvis du søger lidt rundt)

Morten
Avatar billede lillebror Nybegynder
23. april 2006 - 10:12 #11
Lige et tillægsspørgsmål, hvordan får jeg mit singleton object serialized, og indlæst igen med de værdier jeg har gemt i det?
Avatar billede lillebror Nybegynder
23. april 2006 - 10:39 #12
Jeg må have lavet en typo, det virkede fint med serialize(cart::getInstance());
Avatar billede lillebror Nybegynder
23. april 2006 - 14:58 #13
Jeg var lidt for hurtig, kan nemlig ikke få det til at virke med unserialize, har oprettet nyt spørgsmål til det. http://www.eksperten.dk/spm/704641
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