Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Closed TopicStart new topic
> [PHP]Klasy i obiekty
kamil1114
post
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


Czy ktoś mógłby mi wytłumaczyć w jakiś logiczny i zrozumiały sposób do czego służą klasy i obiekty ? Co zyskujemy korzystając z nich ? Czytam kursy o klasach i obiektach , ale dalej nie rozumiem o co chodzi. Proszę o wyjaśnienie i jakieś proste przykłady
Go to the top of the page
+Quote Post
benio101
post
Post #2





Grupa: Zarejestrowani
Postów: 111
Pomógł: 10
Dołączył: 16.07.2009
Skąd: Toruń

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


Nie spamuj!
...
Ehh...
Go to the top of the page
+Quote Post
MateuszS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Benio101, przeciez autor napisal ze nic z kursow nie rozumie. To akurat nic dziwnego bo co jak co ale obiektowy w naszym polskim necie jest wytlumaczony tak ze sam autor kursu nie wie co napisal (IMG:style_emoticons/default/laugh.gif) (IMG:style_emoticons/default/wacko.gif) (IMG:style_emoticons/default/thumbsupsmileyanim.gif)

Z racji ze sam zaczynam z OOP, nie chce Ci mącic. Polecam pisac, po trochu a z czasem (kilka dni) zrozumiesz o co chodzi w klasach i obiektach, choc to dopiero poczatek. Czytaj dalej kursy i staraj sie analizowac skrypty. To nic dziwnego ze nie rozumiesz o co chodzi, nikt w 10 min tego nie zrozumie.

Pozdrawiam i owocnej nauki

Ten post edytował MateuszScirka 17.10.2009, 17:26:31
Go to the top of the page
+Quote Post
marcio
post
Post #4





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

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


Cytat
Benio101, przeciez autor napisal ze nic z kursow nie rozumie. To akurat nic dziwnego bo co jak co ale obiektowy w naszym polskim necie jest wytlumaczony tak ze sam autor kursu nie wie co napisal

Buhahah chyba kursy z yoyo.pl zastanow sie zanim cos powiesz tez tak na poczatku myslalem i jest to bledne myslenie.

Kamil114 poczytaj o MVC wez jakis prosty FW Kohana lub jakis prywatny projekt przeanalizuj kod.
Sprobuj napisac cos sam byle co i pokaz to na forum a dowiesz sie co zle zrobiles to jest dobra droga do nauki.
Go to the top of the page
+Quote Post
kamil1114
post
Post #5





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


Znalazłem taki kod:
  1. <?php
  2. class Klasa
  3. {
  4. function funkcja()
  5. {
  6. return 'a';
  7. }
  8. function inna($a)
  9. {
  10. return trim($a);
  11. }
  12. }
  13. $obiekt = new Klasa();
  14. echo $obiekt->funkcja();
  15. ?>


Powiedzcie mi tylko po co stosować klasy ? Wyczytałem gdzieś , że klasa to zbiór funkcji , ale przecież można też zrobić parę funkcji , więc po co przypisywać je do klasy ?
Go to the top of the page
+Quote Post
MateuszS
post
Post #6





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


A no widzisz to jest dobre pytanie. Tez je zadawalem. W sumie masz racje, dla takich skryptow jak ten powyzej nie ma sensu pisac klasy. Bo ten skrypt mozna skrocic. Ale jezeli masz pisac cala duza strone to obiektowy to bardzo dobre rozwiazanie, te wszystkie wzorce projektowe, uniwersalnosc itd.

Napisali dlatego taki skrypt w obiektowym bo przeciez nie dadza Ci od razu calej strony do analizowania, chca zebys zrozumial jak wyglada OOP, podstawowe zagadnienia, napisal latwo przyklad takiej klasy.

Ten post edytował MateuszScirka 17.10.2009, 18:18:49
Go to the top of the page
+Quote Post
kamil1114
post
Post #7





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


Ale bez programowania obiektowego też można pisać strony i są dobre. Ciągle nie widzę zastosowania oob.
Go to the top of the page
+Quote Post
MateuszS
post
Post #8





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Są dobre, ale ciezej je zmodyfokowac. Zeby dodac jakas przydatna opcje musisz grzebac w kodzie. Sam jeszcze nie odkrylem magii OOP ale bez powodu wiekszosc stron w oop pisana nie jest. Wiec jakis sens musi w tym byc.
Go to the top of the page
+Quote Post
kamil1114
post
Post #9





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


No właśnie , szukam tego sensu , bo dla mnie oop jest dość trudne i zastanawiam się czy jest sens się go uczyć , tym bardziej , że php znam całe , ale po trochu , nie umiem go tak super dobrze. Mysql też znam trochę.
Go to the top of the page
+Quote Post
MateuszS
post
Post #10





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Powiem tak, sam znam php na tyle na ile jest mi potrzebne. Jak czegos nie wiem, to szukam. Mysql to tyle ze umiem zapytania do bazy i w phpmyadminie ;D

Mysle ze nie trzeba znac az tak pro zeby pisac w oop bo tam z nowych rzeczy to dochodza tylko typowe dla oop pojecia praktycznie (klasa, obiekt, konstruktor, dziedziczenie itd.). Sam jeszcze nie napisalem nic duzego, mowia ze trzeba korzystac z wzorcow projektowych itd. Poczytaj o tym jak juz opanujesz podstawy OOP.

Zrob tak: nie mysl czy to potrzebne, ze mozna szybciej itd. ale napisz cos w OOP, cos najprostrzego co moze byc, tak jakbys sie od nowa jezyka uczyl, jakby php byl tylko obiektowy ;D np.

  1.  
  2. class kwadrat {
  3. public $bok;
  4. public $pole;
  5. function pole() {
  6. $this->pole=$this->bok*$this->bok;
  7. return $this->pole;
  8. }
  9.  
  10. }
  11.  
  12. $obKwadrat=new kwadrat();
  13. $obKwadrat->bok=5 // bok;
  14. echo $obKwadrat->pole();


Pisz podobne rzeczy. Z tego co mi mowia to nie wolno pisac w klasie HTMLa (tagow, znacznikow np .<a>, <p> itd, zawsze zwracaj wartosc w funkcji (return).
Go to the top of the page
+Quote Post
Quantum
post
Post #11





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


  1. class kwadrat {
  2. public $bok;
  3. public $pole;
  4. function pole() {
  5. $this->pole=$this->bok*$this->bok;
  6. return $this->pole;
  7. }
  8.  
  9. }
  10.  
  11. $obKwadrat=new kwadrat();
  12. $obKwadrat->bok=5 // bok;
  13. echo $obKwadrat->pole();


Niepotrzebnie zadeklarowana zmienna $pole, bezsens nadawać jej akcesor publiczny i przypisywać wartość w przypadku gdy ją zwracasz, po co Ci dodatkowy dostęp przez $obKwadrat->pole ?

Wiem, że podałeś tylko przykład, ale lepiej uczyć kogoś od początku poprawnie używać OOP.

  1. class pole
  2. {
  3. public function kwadrat($bok)
  4. {
  5. return pow($bok, 2);
  6. }
  7.  
  8. public function prostokat($bok1, $bok2)
  9. {
  10. return $bok1*$bok2;
  11. }
  12.  
  13. public function szescian($bok)
  14. {
  15. return 6*pow($bok, 2);
  16. }
  17. }
  18.  
  19. class objetosc
  20. {
  21. public function szescian($bok)
  22. {
  23. return pow($bok, 3);
  24. }
  25. }
  26.  
  27. $pole = new pole;
  28. print $pole->kwadrat(6);
  29. print $pole->szescian(3);
  30. $objetosc = new objetosc;
  31. print $objetosc->szescian(4);


Klas nie tworzysz dla jednej funkcji, w tym przypadku podzielimy je na pole i objętość, a w niej metody dla poszczególnych figur geometrycznych.

Pozdrawiam (IMG:style_emoticons/default/smile.gif)

Ten post edytował sniffer32 17.10.2009, 22:48:28
Go to the top of the page
+Quote Post
MateuszS
post
Post #12





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


czemu nie uzywasz wew klasy $this-> ?
Go to the top of the page
+Quote Post
marcio
post
Post #13





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

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


Bo zmienne sa parametrami funkcji a nie polami danej klasy.
Go to the top of the page
+Quote Post
kamil1114
post
Post #14





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


A czy umiałby mi ktoś wytłumaczyć do czego służy odwołanie $this. Czytam kursy , ale nie mogę tego zrozumieć. Po co to się stosuje i w jakich sytuacjach ?

Mam na przykład taki kod:
  1. <?php
  2. class pole{
  3.  
  4. function prostokat($a,$b){
  5. $pole=$a*$b;
  6. echo "$pole";
  7. }
  8.  
  9. function kwadrat($a){
  10. $pole=$a*$a;
  11. echo "$pole";
  12. }
  13.  
  14. function trojkat($a,$h){
  15. $pole=($a*$h)/2;
  16. echo "$pole";
  17. }
  18.  
  19.  
  20.  
  21. }
  22. $a=3;
  23. $b=4;
  24.  
  25.  
  26. $policz=new pole();
  27.  
  28. echo "Pole prostokata jest rowne:<br/>";
  29. $policz->prostokat($a,$b);
  30.  
  31. echo "<br/>A pole trojkata<br/>";
  32. $policz->trojkat($a,$h=5);
  33. ?>


I tutaj nie zastosowałem odwołania $this i wszystko działa.
Go to the top of the page
+Quote Post
shark121
post
Post #15





Grupa: Zarejestrowani
Postów: 62
Pomógł: 5
Dołączył: 31.03.2008

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


$this używamy odwołując się do czegoś wewnątrz klasy. Chcąc zrobić coś ze zmienną/metodą wewnątrz klasy użyjesz $this->Metoda(); albo $this->Zmienna;

Poza klasą czyli jak już gdzieś się do niej odwołasz i będziesz miał na przykład $Klasa = new Klasa; i będziesz chciał się odwołać do tej samej zmiennej lub metody to napiszesz $Klasa->Metoda(); lub $Klasa->Zmienna;
Go to the top of the page
+Quote Post
kamil1114
post
Post #16





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


Mniej , więcej rozumiem , ale czy bez utworzenia wcześniej referencji ($this) , można też się odwołać do zmiennej lub funkcji. Bo wydaje mi się , że ja się odwołałem do funkcji , a nie użyłem $this.

  1. <?php
  2. class pole{
  3.  
  4. function prostokat($a,$b){
  5. $pole=$a*$b;
  6. echo "$pole";
  7. }
  8.  
  9. function kwadrat($a){
  10. $pole=$a*$a;
  11. echo "$pole";
  12. }
  13.  
  14. function trojkat($a,$h){
  15. $pole=($a*$h)/2;
  16. echo "$pole";
  17. }
  18.  
  19.  
  20.  
  21. }
  22. $a=3;
  23. $b=4;
  24.  
  25.  
  26. $policz=new pole();
  27.  
  28. echo "Pole prostokata jest rowne:<br/>";
  29. $policz->prostokat($a,$b); //TUTAJ SIE ODWOLALEM
  30.  
  31. echo "<br/>A pole trojkata<br/>";
  32. $policz->trojkat($a,$h=5); // I TUTAJ
  33. ?>




Proszę o pomoc.

Ten post edytował kamil1114 1.11.2009, 18:55:01
Go to the top of the page
+Quote Post
Smertius
post
Post #17





Grupa: Zarejestrowani
Postów: 156
Pomógł: 31
Dołączył: 23.02.2009
Skąd: Sanok

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


$this używasz tylko wtedy kiedy odwołujesz się wewnątrz klasy do metod i zmiennych tej klasy. Np.
  1. class Pole
  2. {
  3. private $a=5;
  4. private $b=3;
  5. function oblicz_pole()
  6. {
  7. $wynik=$this->a*$this->b;
  8. return $wynik;
  9. }
  10. }
  11. $oblicz= new pole;
  12. $pole=$oblicz->oblicz_pole; //Zwróci wynik 15
Go to the top of the page
+Quote Post
kamil1114
post
Post #18





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


Czyli nie zadziałało by takie coś:
  1. $wynik=$a*$b;
?
A czy na zewnątrz klasy też tego się używa ?
Go to the top of the page
+Quote Post
askone
post
Post #19





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Hej

Patrząc na Twe pierwsze próby z programowaniem obiektowym zauważyłem, iż kierujesz się w złą stronę... Uogólniając OOP polega na tym aby zamknąc w ramach klasy wlasciwosci i metody indywidualne dla danego obiektu... W Twoim przypadku kod klasy powinien wygladac tak:

  1. class Kwadrat {
  2. public $a;
  3.  
  4. public function pole()
  5. {
  6. $pole = $a * $a;
  7. echo $pole;
  8. }
  9. }
  10.  
  11. class Trojkat {
  12. public $a;
  13. public $h;
  14.  
  15. public function pole()
  16. {
  17. $pole = 0.5 * $a * $h;
  18. echo $pole;
  19. }
  20. }
  21.  


Oczywiście to tylko propozycja szkieletu, bo idąc dalej można by zdefiniowac klase abstrakcyjna Figura i po niej dziedziczyć powinny konkretne klasy Kwadrat, Prostokat, Trojkat...

Pozdrawiam
Go to the top of the page
+Quote Post
Smertius
post
Post #20





Grupa: Zarejestrowani
Postów: 156
Pomógł: 31
Dołączył: 23.02.2009
Skąd: Sanok

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


Cytat(kamil1114 @ 1.11.2009, 19:14:39 ) *
Czyli nie zadziałało by takie coś: [PHP] pobierz, plaintext
  1. $wynik=$a*$b;
[PHP] pobierz, plaintext ?


Nie zadziała

Cytat(kamil1114 @ 1.11.2009, 19:14:39 ) *
A czy na zewnątrz klasy też tego się używa ?


Nie, $this używamy tylko wewnątrz klasy
Go to the top of the page
+Quote Post
kamil1114
post
Post #21





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


Cytat(Smertius @ 1.11.2009, 19:21:07 ) *
Nie zadziała



Nie, $this używamy tylko wewnątrz klasy




Ale rozumiem , że to nie zadziała , ponieważ jest polecenie return , jeśli byłoby echo , które wyświetlało by wynik , to wszystko byłoby ok.

Ten post edytował kamil1114 1.11.2009, 19:36:05
Go to the top of the page
+Quote Post
Smertius
post
Post #22





Grupa: Zarejestrowani
Postów: 156
Pomógł: 31
Dołączył: 23.02.2009
Skąd: Sanok

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


Może źle się wyraziłem, spójrz na poniższy kod
  1. <?php
  2. class Kwadrat {
  3.  
  4. private $a=4;
  5.  
  6.  
  7.  
  8. public function pole()
  9.  
  10. {
  11. $a=0;
  12. $pole = $a * $a;
  13.  
  14. echo $pole;
  15.  
  16. }
  17.  
  18. }
  19. $obiekt=new Kwadrat;
  20. $obiekt->pole();
  21. ?>

Powyższy kod wyświetli na ekranie 0, bo odwołujesz się do zmiennej w $a zdeklarowanej w metodzie, a nie w klasie. Poniższy kod zwróci 16 bo odwołujesz się do zmiennej "klasowej", użycie return czy echo nie ma tu nic do znaczenia.
  1. <?php
  2. class Kwadrat {
  3.  
  4. private $a=4;
  5.  
  6.  
  7.  
  8. public function pole()
  9.  
  10. {
  11. $a=0;
  12. $pole = $this->a * $this->a;
  13.  
  14. echo $pole;
  15.  
  16. }
  17.  
  18. }
  19. $obiekt=new Kwadrat;
  20. $obiekt->pole();
  21. ?>
Go to the top of the page
+Quote Post
kamil1114
post
Post #23





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


Teraz już rozumiem , dziękuję za pomoc. Jak się trochę poduczę OOP , to będę próbował przepisać mój skrypt dodawania i odczytywania newsów i komentarzy na OOP. Jakie są jeszcze ważne rzeczy, zagadnienia , które są niezbędne do programowania obiektowego. Domyślam się że konstruktor i destruktor , ale czy coś jeszcze. Nie za bardzo rozumiem do czego służy dziedziczenie i jak je wykorzystać.
Go to the top of the page
+Quote Post
MateuszS
post
Post #24





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Sam wiem ze dziedziczenie polega na jakby hmm kopiowaniu zawartosci jednej klasy do drugiej, tzn maja wspolne zmienne/metody (?). W sumie sam jestem ciekaw. Przyłączam się do pytania
Go to the top of the page
+Quote Post
Spawnm
post
Post #25





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




klasa dziedzicząca może używać dóbr rodzica które są public i protect, jednak nie odnosi się do nich przez self lecz przez parent.
A temat zamykam bo wszystko jest w kursach i manualu...
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Closed TopicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 18:22