Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Klasa koszyk
Forum PHP.pl > Forum > PHP > Object-oriented programming
marcio
  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
NuLL
$this->obnizka(...) przyjacielu smile.gif
LBO
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.
marcio
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
pyro
  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. ?>
marcio
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?
pyro
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
marcio
Nom w ogole nie rozumiem do czego sa metody statyczne i klasy i metody abstrakcyjne
marcio
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
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.