Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> koszyk z wykorzystaniem wzorca singleton - dodawanie produktu nie dziala
nieraczek
post
Post #1





Grupa: Zarejestrowani
Postów: 405
Pomógł: 6
Dołączył: 12.01.2007

Ostrzeżenie: (0%)
-----


Klasa:
  1. class klasaKoszyk
  2. {
  3. private static $koszyk_na_zakupy = false; //przechowuje instancje klasy klasaKoszyk
  4.  
  5. private function __construct()
  6. {
  7. $_SESSION['koszyk'] = array();
  8. }
  9.  
  10. //metoda, ktora tworzy instancje klasy tylko raz, jesli instancja klasy juz istnieje to jest zwracany jej
  11. //obiekt, a nie jest tworzona nowa, druga instancja:
  12. public static function getInstance()
  13. {
  14. if( self::$koszyk_na_zakupy == false )
  15. {
  16. self::$koszyk_na_zakupy = new klasaKoszyk();
  17. }
  18. return self::$koszyk_na_zakupy;
  19. }
  20.  
  21.  
  22. public function addToCart($id_produktu)
  23. {
  24. //jesli zmienna sesji o danym id_produktu istnieje to zwieksz ilosc tego produktu o 1
  25. if(isset($_SESSION['koszyk'][$id_produktu])) $_SESSION['koszyk'][$id_produktu]++; //dla tej linii wywala blad za drugim razem
  26. //jesli zmienna sesji o danym id_produktu nie istnieje to ustal ilosc tego produktu na 1
  27. else $_SESSION['koszyk'][$id_produktu]=1;
  28. }
  29. }



Dodawanie do koszyka produktu o id=1:
  1. $koszyk = klasaKoszyk::getInstance();
  2. $koszyk->addToCart(1);
  3.  




Za pierwszym razem dziala, a za drugim juz wywala blad:

Fatal error: Cannot use object of type klasaKoszyk as array in C:
\Program Files\WebServ\httpd\klasy\klasaKoszyk.php on line 30


Dlaczego ? (Linia nr 30 to w istocie linia nr 25 w klasie powyzej)

Ten post edytował nieraczek 3.09.2009, 16:29:07
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
destroyerr
post
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


Dałeś nam na pewno cały kod? Mam wrażenie, że nie.

Poza tym, zauważ, że Twój koszyk nie spełni swojego zadania. Zastanów się nad swoim konstruktorem smile.gif
Go to the top of the page
+Quote Post
emp
post
Post #3





Grupa: Zarejestrowani
Postów: 195
Pomógł: 14
Dołączył: 12.01.2006
Skąd: Gotham City

Ostrzeżenie: (0%)
-----


Z błędu jasno wynika że używasz obiektu jak tablicy to znaczy że powinno być -> a nie []
Teraz przejrzyj swój kod i dowiedz się dlaczego tam gdzie myślisz ze masz tablice jest obiekt typu klasaKoszyk

Debugowanie i szukanie błędów to podstawowa umiejętność jaką powinien wytrwale ćwiczyć każdy programista

//EDIT jak powyżej moim zdanie brakuje kodu szczególnie tego który powoduje "błąd"

Ten post edytował emp 3.09.2009, 16:49:46


--------------------
Temat zamykam i przenoszę do Bangladeszu.
To jest wiadomość śmierci jeśli ją czytasz to znaczy że pozostało ci 30 sekund życia, więc lepiej zacznij się modlić.
Go to the top of the page
+Quote Post
nieraczek
post
Post #4





Grupa: Zarejestrowani
Postów: 405
Pomógł: 6
Dołączył: 12.01.2007

Ostrzeżenie: (0%)
-----


hm....... nie bardzo rozumiem co macie na myśli. Kodu odnosnie czego Wam brakuje ? Co jest nie tak z moim konstruktorem ?

Bo jak tak szukam w google rozwiązania to natrafiam odnosnie uzycia tablicy sesji wewnatrz klasy często na rady związane z serializacją - serialize(), ale teraz już nie wiem, w którym kierunku iść.

Ten post edytował nieraczek 3.09.2009, 18:13:23
Go to the top of the page
+Quote Post
destroyerr
post
Post #5





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


Kodu odnośnie Twojego problemu nam brakuje. Podejrzewam, że wyciąłeś jakąś jego część i dlatego u mnie Twój kod nie sypie błędami.

Jeśli nadal nie rozumiesz jaki błąd popełniłeś w konstruktorze, to może odpuść sobie tą całą zabawę.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 12:02