[PHP] Problem z klasami i sesją

0

Witam,

od jakiegoś czasu pisze obiektowo w PHP. Do tej pory wszystko było ok... niestety piękne dni minęły i nastał czas chaosu.

Stworzyłem sobie klasę shoppingCart. Obecnie jest za długa żeby całą wklejać. W niej mam oczywiście kilka metod publicznych i prywatnych. Klasa nie ma żadnych zmiennych składowych.

Dane dotyczące koszyka gromadzę na zasadzie:
$_SESSION['Cart'][$ID] = $Count; gdzie: $ID - id produktu, $Count - ilość;

Błędy jakie mam występują jedynie na hostingu jaki posiadam. Lokalny serwer na kompie obsługuje mi wszystko normalnie.
Wszystkie błędy powiązane są z wykorzystaniem tablicy $_SESSION. Przykładowo:

Fatal error: Cannot use object of type shoppingCart as array in xxx/shoppingCart.php on line 284

Felerny kod metody:

public function AddToCart($ID,$Quantity=1){
    $_SESSION['Cart'][$ID] += $Quantity; // Linia w ktorej wystepuje blad
    if($_SESSION['Cart'][$ID] <= 0) $this->Delete($ID);
}

Wywołanie koszyka:
$Cart = new shoppingCart();
Ostatecznie, wywołanie metody jest następujące:
$Cart->AddToCart($ID,$Q); Gdzie obie dane są odpowiednimi danymi z GET'a.

Co może być nie tak? Ma ktoś jakiś pomysł? Czy może to być różniąca się konfiguracja PHP na obu serwerach?

0

Może stara wersja PHP, jeszcze niezbyt OOPowa?

phpinfo();

0

Czy tam na pewno masz tablicę?

var_dump($_SESSION['Cart']);
0

Potraktowałem tablice sesyjną poprzez print_r. Zauważyłem coś ciekawego.

Po dodaniu elementu do koszyka, widok z poza klasy:
Array ( [Cart] => Array ( [1] => 1 ) )
Natomiast widok z wnętrza metody zawartej w klasie:
Array ( [Cart] => shoppingCart Object ( ) )

Po odświeżeniu strony pierwszy widok jest następujący:
Array ( [Cart] => __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => shoppingCart ) )

Zastanawiam się w tym momencie jak dokopać się do konkretnej tabeli... Pierwszy raz widzę coś takiego...
Nawet wujek Google nie ma nic ciekawego w swoim repo.

// Edit:
var_dump($_SESSION['Cart']);
object(PHP_Incomplete_Class)#1 (1) { ["PHP_Incomplete_Class_Name"]=> string(12) "shoppingCart" }

0

Gdzieś musisz robić przypisanie, albo podobnego babola. Wklej całość kodu na pastebin

0

http://wklej.org/id/412926/

Całość można sprawdzać pod:
http://mbienkowski.com/ns/

I proszę nie bijcie za kod, robię wszystko na szybko. Chciałbym jak najszybciej skończyć i dlatego całość leci po jakości :P

0
bieniomajster napisał(a)

Po dodaniu elementu do koszyka, widok z poza klasy:
Array ( [Cart] => Array ( [1] => 1 ) )
Natomiast widok z wnętrza metody zawartej w klasie:
Array ( [Cart] => shoppingCart Object ( ) )

w których miejscach kodu robisz te dumpy/printy?

Tak na pierwszy rzut oka, to nigdzie nie inicjujesz elementu tablicy (to raczej nie to, ale może powodować kwiatki):

$_SESSION['Cart'][$ID] = $_SESSION['Cart'][$ID] + $Quantity;

lepiej:

if (array_key_exists($ID, $_SESSION['Cart']))
    $_SESSION['Cart'][$ID] += $Quantity;
else
    $_SESSION['Cart'][$ID] = $Quantity;

i koniecznie daj na samym początku kodu php:

error_reporting(0xFFFF);
0

Inicjowanie nie ma tu akurat nic do rzeczy. Całość na localhoscie smiga... na komercyjnym serwerze już nie... Chyba napisze do serwisu. Niech się panowie męczą tymczasowo ;)

0

Być może nie ma. Ale jeżeli kod sypie Ci warningami, to w którymś z kolei może być sedno problemu.

0

IMHO za dużo tego trzymasz w sesji. Jak już tak chcesz to cały obiekt shoppingCart w niej zapisuj lub najlepiej przejdź na bazę danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0