![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 28.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Nie wiem czy w dobrym miejscu pisze, ale pewnie tak bo to przedszkole, a ja jestem początkujący. Mam następujący problem. Chciałem stworzyć klasę koszyk następująco: class Koszyk { public $id; public $nazwa; public $cena; public $ilosc; public function wypisz() { $i=1; while(isset($this[$i])) { if ($this[$i]->ilosc >0) { print "".$this[$i]->id." ".$this[$i]->nazwa." ".$this[$i]->cena." ".$this[$i]->ilosc."";} $i++; } } public function dodaj($id,$nazwa,$cena) { $z=0; $i=1; while(isset($this[$i])) { if ($this[$i]->id == $id) {$z=$id;} $i++; } if ($z==0) { $j=1; while(isset($this[$j])) { $j++;} $this[$j] = new Koszyk; $this[$j]->ip = $ip; $this[$j]->nazwa = $nazwa; $this[$j]->cena = $cena; $this[$j]->ilosc = 1; } else {$this[$j]->ilosc++;} } } gdy wpisuję $Kosz->wypisz() lub $Kosz->dodaj(x,y,z) wyrzuca "Cannot use object of type Kosz as array in...". Dlaczego tego nie może potraktować jako tablicy? Można to jakoś poprawić, czy cały pomysł jest do niczego? Będę wdzięczny za pomoc, bo już nawet nie wiem gdzie szukać. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 3 Dołączył: 19.10.2007 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze, jak dajesz kod, to umieszczaj go jako kod
Rozumiem, że każda tablica zawiera inny element (np. id, nazwe itd). Ja bym trochę inaczej to napisał. Ale błędem u Ciebie jest to, że piszesz $this[$i]->id co jest całkowicie bez sensu, bo Ty chcesz się zwrócić do elementu $i w tablicy id, a nie w $this, które jest wskaźnikiem, że dana zmienna jest w tej klasie. Czyli powinno być Kod $this->id[$i] I tak we wszystkich. @EDIT Mój kod był nieciekawy ![]() ![]() Ten post edytował kreator 1.03.2009, 10:36:16 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 161 Pomógł: 25 Dołączył: 6.09.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze, jak dajesz kod, to umieszczaj go jako kod Bardzo słuszna uwaga, należałoby dodać, że kod php powinien być umieszczany w tagach php zamiast code, będzie o wiele czytelniejszy. Napisałem na szybko coś swojego na wzór Twojego. Głowy nie dam czy będzie działać, jeżeli coś jest źle to mi wybaczcie bo pisałem to na szybko bez testowania itd ;] Ten kod jest zupełnie nie przemyślany, nie mam tu na myśli błędów składniowych, ale ogólnego schematu działania tego kodu. Do rzeczy:
Zupełnie nie wiem po co przechowywać w klasie jednocześnie pojedynczy produkt i tablicę produktów.
Ta funkcja wg. mnie nie ma żadnego sensu. Iterujesz po zmiennej $i, której ani razu nie użyłeś wewnątrz pętli. Moim skromnym zdaniem cała klasa zawiera liczne błędy logiczne w podejściu obiektowym. Według mnie prywatna właściwość produkty powinna być tablicą przechowującą obiekty klasy Produkt. Funkcja dodaj powinna zajmować się dopisywaniem obiektów klasy produkt do tej tablicy. Natomiast funkcja wypisz powinna zostać zastąpiona funkcją pobierzProdukt, która zwracałaby pojedynczy produkt. Mój opis klasy Koszyk jest niekompletny i przedstawia tylko podstawowe założenia, aby klasa była bardziej zgodna z podejściem OOP. Oczywiście jest to tylko jedno z możliwych podejść. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 3 Dołączył: 19.10.2007 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
@up
Wiem że może być sporo błędów, bo raz jestem jeszcze trochę początkującym programistą, a dwa miałem na to może 5 minut ;] |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 07:24 |