Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Klasy a tablice
dudzisz
post
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ć.
Go to the top of the page
+Quote Post
kreator
post
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 tongue.gif Jak już to powiedział Pan niżej biggrin.gif

Ten post edytował kreator 1.03.2009, 10:36:16
Go to the top of the page
+Quote Post
piaseq
post
Post #3





Grupa: Zarejestrowani
Postów: 161
Pomógł: 25
Dołączył: 6.09.2008
Skąd: Warszawa

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


Cytat(kreator @ 28.02.2009, 08:25:39 ) *
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.


Cytat(kreator @ 28.02.2009, 08:25:39 ) *
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:

Cytat(kreator @ 28.02.2009, 08:25:39 ) *
  1. <?php
  2.              
  3.              class Koszyk
  4.              {
  5.                  public $produkt;
  6.                  public $produkty;
  7. }
  8. ?>

Zupełnie nie wiem po co przechowywać w klasie jednocześnie pojedynczy produkt i tablicę produktów.

Cytat(kreator @ 28.02.2009, 08:25:39 ) *
  1. <?php
  2. public function wypisz() {
  3.                  for($i=0;$i<count($this->produkty);$i++) {
  4.                      if ($this->produkty['ilosc'] >0) {
  5.                          print "".$this->produkty['id']." ".$this->produkty['nazwa']." ".$this->produkty['cena']."
  6.            ".$this->produkty['ilosc']."";
  7.        }
  8.                      $i++;
  9.                   }
  10.              }
  11. ?>

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ść.
Go to the top of the page
+Quote Post
kreator
post
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 ;]
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: 19.08.2025 - 07:24