Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> [php] klasy, obiekty- co to?
-Gość_Suchy-
post 19.04.2006, 20:10:19
Post #1





Goście







Witam. Po pierwsze przepraszam za brak tagu w topicu. Nie napsiałe mbo eni wie mgdzie to włożyć. Mam problem. Nie umiem nauczyć sie klasi obiektów. W ogule nie wiem po coto jest i zczym t osięje. Podstawy php znam ,ale z tym mam ogromny problem:/ gdyby ktoś mołg i zechiał , drodzy forumowicze, podzielić sięswojąwiedzą na ten temat byłby mwdzieczny.
Go to the top of the page
+Quote Post
maverickkk
post 19.04.2006, 20:11:55
Post #2





Grupa: Zarejestrowani
Postów: 181
Pomógł: 0
Dołączył: 12.11.2005

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


Pierwszy lepszy tutek o tym mówi.

http://www.ygreg.com/pokaz.php/klasy

http://moj.one.pl/php/language.oop.html

weź się w garść bo to nic tródnego.


--------------------
Robie to co lubie, lubie to co Robie
Go to the top of the page
+Quote Post
Sabistik
post 19.04.2006, 22:50:49
Post #3


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


Radze zagladnac do wortalu oraz phpedi...
Go to the top of the page
+Quote Post
envp
post 19.04.2006, 23:08:30
Post #4





Grupa: Zarejestrowani
Postów: 359
Pomógł: 1
Dołączył: 16.04.2006
Skąd: Łódź

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


Według mnie, to te kursy co zaproponowaliście są troche stare, odnoszą się do PHP4, a idea programowania obiektowego troche odbiega od tego, dopiero w PHP5 wprowadzono wszelkie udogodniania, które wyrażają OOP tak jak należy (Hermetyzacja itp.) Polecam książkę PHP5 Zaawansowane programowanie z helionu. Ale tak jak napisałem to tylko moja opinia. Pozdrawiam

Ten post edytował envp 19.04.2006, 23:10:41
Go to the top of the page
+Quote Post
-Gość_Suchy-
post 20.04.2006, 06:03:17
Post #5





Goście







a do czego stosuje się klasy i obiekty?
Go to the top of the page
+Quote Post
envp
post 20.04.2006, 08:21:47
Post #6





Grupa: Zarejestrowani
Postów: 359
Pomógł: 1
Dołączył: 16.04.2006
Skąd: Łódź

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


Hm, założenie programowania obiektowego polega na tym, ze wszystko tratkujesz jako obiekt i kod jest bardziej przejzysty, oraz daje sie wykorzystac wiele razy. Wyobraz sobie ze masz klase czworokat(klasa to jak gdyby zbior obiektow - wszystkie obiekty ktore dadza sie dana klasa opisac tworzą ją) klasa ta ma wlasciwosc: dlugosc przeciwleglych_bokow.
Dodajesz do niej metode (getArea() - czyli oblicz pole) i teraz jak chcesz obliczyc pole to tworzysz sobie obiekt : $prostokat = new czworokat(3,2); mozesz takze obliczyc pole kwadratu - jesli podasz dlugosci bokow przeciwleglych takie same.
Nastepna sprawa to dziedziczenie - jesli jeden obiekt dziedziczy cech oraz metody po innym... Np. masz klase wielokat i w tej klasie podklasy kwadrat, szesciokat, itd... wszystkie dziedzicza dlugosc bokow po swojej klasie rodzicu ... noi bardzo przydatna rzecz interfejs (jesli masz obiekt sloik oraz obiekt drzwi - to obydwa da sie otworzyc ale nie maja ze soba nic wspolnego oprocz tej akcji - wiec sa to odzielne klasy ze wspolnym interfejsem smile.gif
To tak baaardzo w skrocie... naprawde polecam tą książkę z Helionu, bo programowanie obiektowe jest fajne...
Go to the top of the page
+Quote Post
-Gość_Suchy-
post 20.04.2006, 16:01:03
Post #7





Goście







okej to wyjaśniłeś mi jak sie to robi ale dalej nei wiem gdzie t oma zastosowanie.. tzn wiem po co sąfukncje - zeby wykonywaćko dgdzie tylko chcemy i ile razy chcemy, ale dalej nie wie mp oco obiekty ;]
Go to the top of the page
+Quote Post
TomASS
post 20.04.2006, 16:46:18
Post #8





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


To ja się podepnę do tematu smile.gif

W ostatnim moim projekcie szeroko używałem (a właściwe w całym) klas - i to jest to czego mi brakowało. Teraz jakakolwiek uwaga od klienta o poprawienie czegoś to kwestia paru minut - przerobienie klasy i już, nigdzie nie muszę biegać po plikach i szukać czym zmiana zaskutkuje, jakie zmienne modyfikuje itp. W klasie, ważny jest 'interface' czyli to jak ona komunikuje się ze światem - jeśli coś zmieniasz w 'środku' klasy, a interface pozostawisz nienaruszony (oczywiście nie zawsze tak się da), to 'środowisko zewnętrzne' - inne klasy, z powodzeniem będą mogły w dalszym ciągu komunikowac się z naszą klasą smile.gif

Do używania klas trzeba się samemu przekonać i 'dojżeć' smile.gif powodzenia :roll2:


--------------------
Go to the top of the page
+Quote Post
Master Miko
post 20.04.2006, 16:50:15
Post #9





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

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


popatrz poprostu sobie na bardziej zaawansowane skrypty, jak ADoDB, albo smarty - pewnie nie zrozumiesz, ale zobaczysz, że to ładnie wygląda, chodzi i jest łatwe w użyciu.

Oczywiście php został przystosowany do OOP, więc nie jest stricte obiektowym językiem. Można wszystko napisać również "normalnie", czyli liniowo. Nie ma dużej różnicy, jeśli chodzi o wydajność. Tu chodzi o łatwość w użyciu (szczególnie przy skomplikowanych projektach)

Dyskusja o tym co jest lepsze toczy się już długo, ale moim zdaniem tak naprawdę nie ma różnicy. Klasy świadczą o tym, że jesteś już trochę na wyższym poziomie prgoramowania i ogólnie przyjemnie się z nimi pracuje, choć zaprojektowanie ich czasem bywa kłopotliwe.

Początkujący powinni pisać liniowo, aby poznać podstawy. Średnio-zaawansowani powinni uczyć się klas...

Cały wątek bardzo dobrze podsumował TomASS:
Cytat
Do używania klas trzeba się samemu przekonać i 'dojżeć'


Ten post edytował Master Miko 20.04.2006, 16:51:19


--------------------
Go to the top of the page
+Quote Post
-Gość_Suchy-
post 20.04.2006, 20:26:51
Post #10





Goście







okej dziekuje za odpowiedzi:) a teraz jeszcze jedno pytanie, które mnie nurtuje- możecie podać przykład prostej, ale przydatnej klasy?
Go to the top of the page
+Quote Post
bela
post 20.04.2006, 20:39:07
Post #11


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


www.phpclasses.com


--------------------
Go to the top of the page
+Quote Post
NuLL
post 20.04.2006, 20:40:11
Post #12





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

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


www.smarty.php.net


--------------------
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
mike
post 20.04.2006, 20:44:40
Post #13





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Ale chłopaki go na głąboką wodę rzuciliście smile.gif
Może coś mniejszego: PHPMailer tongue.gif
Go to the top of the page
+Quote Post
Sabistik
post 20.04.2006, 20:51:39
Post #14


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


Wystarczy przegladnac odpowiedni dzial forum Algorytmy, klasy, funkcje
Go to the top of the page
+Quote Post
-Gość_Suchy-
post 20.04.2006, 21:03:29
Post #15





Goście







okej dziekuje bardzo.. pewnie jakies pytania jeszcze sięnasuną.. ale to chyba dobrtze co nie ?smile.gif
Go to the top of the page
+Quote Post
TomASS
post 20.04.2006, 21:27:00
Post #16





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cytat
chyba dobrtze co nie

Dobrze smile.gif

Może na siłę nie skacz na 'obiekty' - to przyjdzie samo - zobaczysz, że zaczyna Ci czegoś brakować, coś można zrobić szybciej, inaczej....samo przyjdzie. Jak napiszesz jakąś klasę (nawet najprostrzą) to wklej ją tutaj a my ją - jak to się mówi - 'przetrzepiemy' smile.gif


--------------------
Go to the top of the page
+Quote Post
ens0re
post 20.04.2006, 21:45:50
Post #17





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 23.08.2005
Skąd: Warszawa

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


No to jeżeli mówimy o początkach w OOP to może i ja sie pochwale pierwszym skryptem tongue.gif Pełno tego w sieci, ale napisałem oczywiscie klase do obsługi baz danych tongue.gif Wiem ze mogłem użyc konstruktora, kilka opcji dodać, cache'owanie itp. No i jeszcze wyjątki wprowadzić zamiast tej prymitywnej funkcji błędów tongue.gif (jeszcze nie ogarnąłem wyjątków). Jeżeli moglibyście ocenić(ten marny kod) podpowiedzieć coś, pomóc jakoś to byłbym wdzięczny:
  1. <?php
  2.  
  3. class database {
  4.  
  5. // Zmienne podstawowe
  6.  
  7.  
  8. var $handler;
  9. var $db_host = 'localhost'; // host
  10. var $db_user = 'root'; // login
  11. var $db_pass = ''; // haslo
  12. var $db_name = 'users'; // baza
  13. var $query_res = '' // zapytania
  14.  
  15.  
  16. // Funkcje błędów
  17.  
  18.  
  19. public function dbError()
  20.  
  21.  {
  22.  
  23. if (mysql_error() > 0) {
  24.  
  25. die('Wystąpiły jakies błedy.<br />');
  26.  
  27. } else {
  28.  
  29. return true;
  30.  
  31. }
  32.  
  33.  }
  34.  
  35.  
  36.  
  37.  
  38. // Własciwe funckje
  39.  
  40.  
  41. public function dbConnect () // łaczenie z baza
  42.  
  43. {
  44.  
  45.  if (!$this->handler = mysql_connect($this->db_host, $this->db_user, $this->db_pass)) {
  46.  
  47.  die ('Nie można połączyć sie z serwerem.<br />');
  48.  
  49. } else {
  50.  
  51. return $this->handler;
  52.  
  53. }
  54.  
  55. }
  56.  
  57.  
  58.  
  59. public function dbSelect() // wybieranie bazy
  60.  
  61. {
  62.  
  63.  if (!$this->handler = mysql_select_db($this->db_name)) {
  64.  
  65.  die('Nie można połaczyć z baza.<br />');
  66.  
  67. } else {
  68.  
  69.  return $this->handler;
  70.  
  71.  }
  72.  
  73. }
  74.  
  75.  
  76. public function dbQuery($query)
  77.  {
  78.  
  79. $this->query_res = mysql_db_query($this->dbname, $query);
  80. if(!$this->query_res)
  81. {
  82.  return false;
  83. } else {
  84.  return true;
  85. }
  86.  }
  87.  
  88.  
  89. public function dbFetch_row($query_res = '')
  90.  {
  91. $queryArray = mysql_fetch_array($query_res);
  92. if(!$queryArray)
  93. {
  94.  return false;
  95. } else {
  96.  return $queryArray;
  97. }
  98.  }
  99.  
  100.  
  101. public function dbNum_rows($query_res = '')
  102.  {
  103. $numrows = mysql_num_rows($query_res);
  104. if(!$numrows)
  105. {
  106.  return false;
  107. } else {
  108.  return $numrows;
  109. }
  110.  }
  111.  
  112.  
  113. public function dbClose()
  114.  {
  115. $dbClose = mysql_close($this->handler);
  116. if(!$dbClose)
  117. {
  118.  return false;
  119. } else {
  120.  return true;
  121. }
  122.  }
  123.  
  124. }
  125. ?>


Ten post edytował ens0re 20.04.2006, 21:47:20


--------------------
"Oprócz tabel istnieje jeszcze jedna dalece ograniczająca struktura, składająca się z rzędów i komórek - więzienie. Dla projektantów nadszedł czas, aby sie uwolnić..." - Eric A. Meyer
Go to the top of the page
+Quote Post
TomASS
post 20.04.2006, 22:00:03
Post #18





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Z obiektów to nie jestem jakiś 'wymiatacz', ale napiszę jak mi się wydaje smile.gif

1. Po pierwsze primo przydałby się konstruktor.
2. Po drugie primo przydałoby się zmienne var $db_host uczynić prywatnymi'
3. Po trzecie primo chyba nie wszystkie z tych funkcji muszą być 'public'
4. Po czwarte primo ultiom metodę dbClose() przydałoby się wrzucić do destruktora - tak mi się wydaje

smile.gif Mi się podoba smile.gif


--------------------
Go to the top of the page
+Quote Post
ens0re
post 20.04.2006, 22:07:30
Post #19





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 23.08.2005
Skąd: Warszawa

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


Co do 1 i 2 pkt to wiem, ale jakoś tak napisałem na poczatku i tak zostało - zawsze mozna zmienić. Tylko coś dalej nie kumam 2 i 3pkt. Dlaczego prywatnymi uczynić? I czemu nie powinno być public(a jak inaczej to zrobic)? Dzieki za pomoc tongue.gif


--------------------
"Oprócz tabel istnieje jeszcze jedna dalece ograniczająca struktura, składająca się z rzędów i komórek - więzienie. Dla projektantów nadszedł czas, aby sie uwolnić..." - Eric A. Meyer
Go to the top of the page
+Quote Post
TomASS
post 20.04.2006, 22:16:38
Post #20





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Czy chcesz aby użytkownik klasy miał bezpośredi dostęp do wszystkich zmiennych? Tak nie może być - to się nazywa chyba enkapsulacją danych.
Zrób tak (jeśli tych zmiennych nie ustawisz w konstruktorze):
  1. <?php
  2. class database {
  3. private $db_host
  4.  
  5. public SetDb_host($value){
  6.  $this->db_host = $value;
  7. }
  8. public GetDb_host(){
  9.  return $this->db_host;
  10. }
  11. }
  12. ?>

To zapobiega tworzeniu się błędów np.
masz tak:
  1. <?php
  2. class KLASA{
  3.  var $wartosc_liczbowa;
  4. }
  5.  
  6. $kl = new KLASA();
  7. $kl->wartosc_liczbowa = 'a kuku';
  8. ?>

Lepiej jest dać:
  1. <?php
  2. class KLASA{
  3.  private $wartosc_liczbowa;
  4. public SetWartosc_liczbowa($wartosc){
  5.  $this->wartosc_liczbowa = (int)$wartosc;
  6. }
  7. }
  8.  
  9. $kl = new KLASA();
  10. $kl->SetWartosc_liczbowa('a kuku');
  11. ?>




pkt 3. Nie zauważyłem, że metoda dbError() nie jest używana tylko w środku klasy. Wszystkie metody, które używasz w klasie i tylko w niej rób 'private'


--------------------
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
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: 12.06.2025 - 20:22