Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: koszyk z wykorzystaniem wzorca singleton - dodawanie produktu nie dziala
Forum PHP.pl > Forum > PHP
nieraczek
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)
destroyerr
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
emp
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"
nieraczek
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ść.
destroyerr
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ę.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.