Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Klasa koszyk
marcio
post 9.09.2008, 21:24:56
Post #1





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


  1. <?php
  2. class koszyk {
  3.  
  4. private $klient;
  5. private $kasa;
  6.  
  7. function __construct($klient, $kasa) {
  8.     $this -> klient = $klient;
  9.     $this -> kasa = $kasa;
  10.   }
  11.  
  12.  
  13. public function obnizka($procent, $cena_rzecz) {
  14.  
  15. $nowa_cena = ($this -> $cena_rzecz * $this -> $procent) / 100;
  16. return $this -> cena_rzecz - $nowa_cena;
  17.  
  18. }
  19.  
  20. public function premia($premia) {
  21.  
  22. return $this -> kasa += $premia;
  23.  
  24. }
  25.  
  26. public function kup($koszt, $obnizka = 0, $rzecz, $premia = 0) {
  27.  
  28.  
  29. if($obnizka == 0) {
  30.  
  31. echo($this -> klient.' posiadas: '.$this -> kasa.'zl<Br>');
  32.  
  33. if($premia == 0) $this -> kasa = $kasa;
  34.  
  35. else $this -> kasa += $premia;
  36.  
  37. $reszta = $this -> kasa - $koszt;
  38.  
  39. if($reszta >= 0) echo('Kupile: '.$rzecz.' za '.$koszt.'<Br>Zostalo c: '.$reszta.'zl');
  40.  
  41. else echo('Niestety ale nie stac cie<Br>');
  42. }
  43.  
  44. else if($obnizka > 0) {
  45.  
  46. echo($this -> klient.' posiadas: '.$this -> kasa.'zl<Br>');
  47.  
  48. $reszta = obnizka($obnizka, $koszt);
  49.  
  50. if($reszta >= 0) echo('Kupile: '.$rzecz.' za '.$koszt.' z '.$obnizka.'% obznika<Br>Zostalo c: '.$reszta.'zl');
  51.  
  52. else echo('Niestety ale nie stac cie<Br>');
  53.  
  54.  }
  55. }
  56. }
  57.  
  58. $zakupy = new koszyk('Marcio', 150);
  59. $zakupy2 = new koszyk('Anonim', 230);
  60. $zakupy3 = new koszyk('Biedak', 1700);
  61.  
  62. $zakupy -> kup(50, 0, 'karta pamieci', 0);
  63. echo('<Br>');
  64. $zakupy2 -> kup(370, 0, 'odtwarzacz dvd', 150);
  65. echo('<Br>');
  66. $zakupy3 -> kup(3100, 0, 'Televizor lcd', 0);
  67. ?>


Mam taka klase jedyne co mi nie dziala to gdy robie znizke zwraca mi taki blad:
  1. <?php
  2. Fatal errorCall to undefined function obnizka() in /old/ad3s1f/virtual/szu.pl/m/marcio/www/url2.php on line 48
  3. ?>

Dlaczego??

I czy jest to napisane z idea OOP czy tylko z jej skladnia to juz ktorys raz z rzedu podchodze do OOP ale wydaje mi sie ze teraz zaczynam rozumiec, a skoro jest to kruciutka klasa moze ktos pokarze jakby ja sam napisal chyba ze moj sposob jest dobry


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
NuLL
post 9.09.2008, 21:29:54
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


$this->obnizka(...) przyjacielu smile.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
LBO
post 9.09.2008, 21:29:57
Post #3





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Co do błedu:

  1. <?php
  2. $reszta = obnizka($obnizka, $koszt);
  3. ?>


zamień na:

  1. <?php
  2. $reszta = $this->obnizka($obnizka, $koszt);
  3. ?>


PHP nie posiada pełnej obiektowości, tak więc obniżka() traktuje jako zwykłą funkcje, a nie metodę klasy.
Go to the top of the page
+Quote Post
marcio
post 10.09.2008, 11:46:44
Post #4





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Aha na faktycznie a czy ta klasa podtrzymuje idee OOP jak bym mogl to napisac pracujac na obiektach i atrybutach z zewnatrz klasy wiem ze za pomoca operatora public zamiast private jednak czy ma to sens?

P.S zostawilem funkcje obnizka tak jak byla wczesniej czyli:
  1. <?php
  2. public function obnizka($procent, $cena_rzecz) {
  3.  
  4. $nowa_cena = ($this -> $cena_rzecz * $this -> $procent) / 100;
  5. return $nowa_cena;
  6.  
  7. }
  8.  
  9. // wywoluje
  10.  
  11. $znizka_r = $this -> obnizka($obnizka, $koszt);
  12. $reszta = $this -> kasa - ($koszt - $znizka_r);
  13. ?>


jednak zmienna $znizka_r zwraca 0 dlaczego taki prosty kod biggrin.gif

Ten post edytował marcio 10.09.2008, 11:52:58


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
pyro
post 10.09.2008, 11:56:16
Post #5





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


  1. <?php
  2. public function obnizka($procent, $cena_rzecz) {
  3.  
  4. $nowa_cena = ($cena_rzecz * $procent) / 100;
  5. return $nowa_cena;
  6.  
  7. }
  8.  
  9. // wywoluje
  10.  
  11. $znizka_r = $this->obnizka($obnizka, $koszt);
  12. $reszta = $this->kasa - ($koszt - $znizka_r);
  13. ?>


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
marcio
post 10.09.2008, 12:34:52
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Aha dzieki juz rozumiem gdy mam jakies argumenty funkcji do nich odwoluje sie normalnie bez $this-> smile.gif

jednak mam 2 pytania mysle ze jak to zrozumie moge dalej probowac cos kodzic w OOP

-Jak sie uzywa implements i po co?
-Klasy abstrakcyjne i jej funkcje sluza tylko po to ze gdy wiemy ze klasa dziedziczaca od klasu nadrzednej bedzie zmieniac jej metody a jesli ich nie zmienia to sie nie daje abstract?


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
pyro
post 10.09.2008, 12:38:58
Post #7





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(marcio @ 10.09.2008, 13:34:52 ) *
-Jak sie uzywa implements i po co?


implements się używa do interfejsow, dokladniejsze wytlumaczenie jest w manualu

Drugiego pytania nie do końca zrozumiałem bo jak sądzę jest zle sformulowane tongue.gif


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
marcio
post 10.09.2008, 13:31:08
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Nom w ogole nie rozumiem do czego sa metody statyczne i klasy i metody abstrakcyjne


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
pyro
post 10.09.2008, 13:34:20
Post #9





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


http://webcity.pl/webcity/programowanie_ob...e_w_php_5_cz__2


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
marcio
post 10.09.2008, 21:02:41
Post #10





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat(pyro @ 10.09.2008, 14:34:20 ) *


Tak sie sklada ze wlasnie z tego sie ucze i jeszcze ksiazka w ktorej wszystko jest bardzo slabo opisane

Chyba znalazlem watek http://forum.php.pl/index.php?showtopic=65622&st=20 w ktorym wszystko jest ladnie opisane dzis poczytam jeszcze ten art i ten watek i wyciagne z tego wnioski

Ok ok juz cos zaczynam rozumiem jednak jedna rzecz mnie dziwi oto cytat z klas abstrakcyjnych:
Cytat
Programowanie obiektowe przewiduje możliwość tworzenia klas przeznaczonych wyłącznie do rozszerzenia, od których nie można utworzyć obiektów. Nazywamy je klasami abstrakcyjnymi. Abstrakcyjna może być zarówno cała klasa, jak i jej część (wybrane metody, które muszą zostać nadpisane w klasie pochodnej).


A oto cytat z rozdzialu dotyczacego dziedziczenia slowa final i parent::
Cytat
Co należy zapamiętać z tego rozdziału? Ano, że jeśli chcemy jakąkolwiek metodę rozszerzyć, a nie nadpisać (dotyczy to również konstruktorów, destruktorów i wszystkich innych metod specjalnych), musimy ręcznie wywołać jej starą wersję z klasy bazowej poprzez statyczny "wskaźnik" parent.


To jaka jest roznica pomiedzy rozszerzaniu metod za pomoca klas abstrakcyjnych ktore sa dziedziczone przez klasy pochodnie od rozszerzania metod poprzez dziedziczenie i uzycia slowa parent::jaka_funkcja??

A slowo final na klase znaczy ze po dziedziczeniu nie mozna modyfikowac metod?

P.S zauwazylem ze OOP zaczyna mi sie naprawde podobac a i tak musze je pojac bo ucze sie tez Cpp

Ten post edytował marcio 10.09.2008, 13:44:51


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
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 Wersja Lo-Fi Aktualny czas: 28.03.2024 - 13:17