Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] klasy, obiekty- co to?
Forum PHP.pl > Forum > Przedszkole
Gość_Suchy
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.
maverickkk
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.
Sabistik
Radze zagladnac do wortalu oraz phpedi...
envp
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
Gość_Suchy
a do czego stosuje się klasy i obiekty?
envp
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ść_Suchy
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 ;]
TomASS
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:
Master Miko
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ć'
Gość_Suchy
okej dziekuje za odpowiedzi:) a teraz jeszcze jedno pytanie, które mnie nurtuje- możecie podać przykład prostej, ale przydatnej klasy?
bela
www.phpclasses.com
NuLL
www.smarty.php.net
mike
Ale chłopaki go na głąboką wodę rzuciliście smile.gif
Może coś mniejszego: PHPMailer tongue.gif
Sabistik
Wystarczy przegladnac odpowiedni dzial forum Algorytmy, klasy, funkcje
Gość_Suchy
okej dziekuje bardzo.. pewnie jakies pytania jeszcze sięnasuną.. ale to chyba dobrtze co nie ?smile.gif
TomASS
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
ens0re
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. ?>
TomASS
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
ens0re
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
TomASS
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'
ens0re
Nie wiem, może źle zrozumiałem Ciebie, wiec mam zrobić coś takiego?:
  1. <?php
  2. class database {
  3. private $db_host;
  4. private $db_user;
  5. private $db_pass;
  6. private $db_name;
  7.  
  8. public SetDb_host($value){
  9.  $this->db_host = $value;
  10. $this->db_user = $value;
  11. $this->db_pass = $value;
  12. $this->db_name = $value;
  13. }
  14. public GetDb_host(){
  15.  return $this->db_host;
  16. return $this->db_user;
  17. return $this->db_pass;
  18. return $this->db_name;
  19. }
  20. }
  21. ?>

Aha i dzieki za linka, otworzył mi lekko klapki na oczach smile.gif
TomASS
Nie tak smile.gif
  1. <?php
  2. public SetDb_host($value){
  3.  $this->db_host = $value;
  4. $this->db_user = $value;
  5. $this->db_pass = $value;
  6. $this->db_name = $value;
  7. }
  8. ?>

Wtedy wszystkie db_XXX będą miały taką samą wartość - a to chyba nie jest celem tej metody.

  1. <?php
  2. public GetDb_host(){
  3.  return $this->db_host;
  4. return $this->db_user;
  5. return $this->db_pass;
  6. return $this->db_name;
  7. }
  8. ?>

Jak metoda może zwracać tak wartości, wyjdzie przy pierwszym lepszym returnie.
Muszis robić metody GetXXXX i SetXXXX dla każdej zmiennej osobno, chyba że........ użyjesz do tego magiczne metody __set __get smile.gif
ens0re
A no to trzeba było mówić odrazu o __set i __get tongue.gif Będę musiał jeszcze poczytać o tym. Dzieki za pomoc. Może ktoś jeszcze ma coś do dodania, byłbym wdzieczny? Pozdrawiam!
TomASS
Cytat
A no to trzeba było mówić odrazu o __set i __get

Trzeba było się spytać tongue.gif
Cytat
Będę musiał jeszcze poczytać o tym

Najlepiej tutaj.
Cytat
Dzieki za pomoc

Prosimy guitar.gif
Gość_Suchy
no to stworzyłem klase która miałaa wczytywać kod html z pliku i zamias{mojtag} wstawis jakas wartosc :/ udało m isie napisać jedynie to:

  1. <?
  2.  
  3. class Szablon
  4. {
  5.  
  6. var $plikSzablonu; //zawiera scieszke do plik uz szablonem
  7. var $zawartosc;  //zawiera tresc plik uszablonu
  8.  
  9. function ustawPlik($nazwaPlikuSzablonu)
  10. {
  11. $this->plikSzablonu=$nazwaPlikuSzablonu;
  12.  
  13. }
  14.  
  15. function czytajPlik()
  16. {
  17. $this->zawartosc=file($this->plikSzablonu);
  18. }
  19.  
  20.  
  21. function pokazSzablon()
  22. {
  23.  foreach($this->zawartosc as $temp) 
  24.  {
  25.  print($temp);
  26.  }
  27. }
  28.  
  29.  
  30.  
  31. }
  32.  
  33. ?>


no i teraz obierkt:
  1. <?
  2. include('klasa.php');
  3. $obiekt= new szablon;
  4. $obiekt->ustawPlik('szablon.php');
  5. $obiekt->czytajPlik();
  6. $obiekt->pokazSzablon();
  7.  
  8. ?>


i jeszcze szablon .php
  1.      
  2.      coś<br>
  3.      {mojtag}
  4.      <br>
  5.      cos
  6. </body>
  7. </head>
  8. </html>


niestety nie udało mi sięnapsiaćzamiany {mojtag} na jakas wartosc:/ ja kt ozrobic?

i czy to conapisałe mm a jakis sens?
TomASS
Co do klasy:
  • Dlaczego nie używasz słów kluczowych 'private', 'public' itp. ?
  • Brak konsturkotra/destruktora
  • Może to bez znaczenia ale klasa nazywa się szablon czy Szablon?

Cytat
jeszcze szablon .php

Chyba HTML tongue.gif

Cytat
niestety nie udało mi sięnapsiać zamiany {mojtag} na jakas wartosc:/ ja kt ozrobic?

Nobo nigdzie nie robisz zastępowania tagów wartościami.

Cytat
i czy to conapisałe mm a jakis sens?

Ma - tak właśnie działają Frameworki smile.gif
Gość_Suchy
po co konstruktor/destruktor jest?
jak zastapic {mojtag} np napisem "jekis znacznik"?
d oczeg osluza te slowa kluczowe?snitch.gif
TomASS
Cytat
d oczeg osluza te slowa kluczowe?

Pisz proszę wyraźniej smile.gif
Już to wcześniej z ens0re tłumaczyłem. Zobacz tutaj.

Cytat
jak zastapic {mojtag} np napisem "jekis znacznik"?

Użyć możesz np. funkcji preg_replace

Cytat
po co konstruktor/destruktor jest?

Również tutaj.
Guest
dzięki ;0 jużzabieram siędo lektury smile.gif
Gość_Suchy
chciałbym sięz wami podzielić moimi wnioskami, do ktorych doszedłem po kilku dniach prac yz klasami:

-kod jest bardzje czytelny smile.gif
-łatwiej go wykorzystać kilka razy lub prz yinnych projekatch
-po napisaniu bardzo prostej klasy szabonow czlowiek inaczej patrzy na programowanie i zastanawi sie czem uodrazu tak nie robił biggrin.gif

ale mnostw ojest jeszcze d ozrobienia biggrin.gif
Gość_Suchy
mam kolejny problem:D npisałe mklase szablony, klase polaczenia z baza danych. moja klasa szabolonu potrzebuje obrania z bazy dancyh tutyulu strony, oraz tresci strony. czyli ma mtabele: |id|tytul|tresc| czy do zwyklego pobranias anych z bazy dancyh i przekazania ich do klasy z szablonem pisac koljna klase cz yzapsiac t oliniowo?
Gość_Suchy
przepraszam za 3 post z rzedu:/


chciałbym siępochwalićtym co stworzyłem. Cudo to nie jest ale działa smile.gif Napisalem skrypt, który pobiera z bady danych informacje na strone , tzn tytuł strony ijej treść. Potem przekazuje te dane do szablonu strony który jest wyświetlany smile.gif

polaczenie z baza danych:
  1. <?
  2. class polaczenieDb
  3. {
  4. var $dbhost;
  5. var $dbuser;
  6. var $dbpassword;
  7. var $dbname;
  8.  
  9. function polaczenieDb()
  10. {
  11. $this->dbhost='localhost';
  12. $this->dbuser='root';
  13. $this->dbpassword='password';
  14. $this->dbname='mydb';
  15. }
  16.  
  17.  
  18. function polacz()
  19. {
  20. if(!mysql_connect($this->dbhost, $this->dbuser, $this->dbpassword))
  21. {
  22. print('Error: '.mysql_error());
  23. }
  24.  
  25. if(!mysql_select_db($this->dbname))
  26. {
  27. print('Error: '.mysql_error());
  28. }
  29. }
  30.  
  31.  
  32. function rozlacz()
  33. {
  34. if(!mysql_close(mysql_connect($this->dbhost, $this->dbuser, $this->dbpassword)))
  35. {
  36. print('Error: '.mysql_error());
  37. }
  38. }
  39.  
  40.  
  41. }
  42.  
  43.  
  44. ?>


pobieranie danych z bazy:

  1.  
  2. <?
  3.  
  4. class daneStrony
  5. {
  6. var $tabelaDanych;
  7. var $stronaId;
  8. var $stronaNazwa;
  9. var $stronaTytul;
  10. var $stronaTresc;
  11.  
  12. function daneStrony()
  13. {
  14. $this->tabelaDanych='podstrona';
  15.  
  16. if(!isset($_GET['strona']))
  17. {
  18. $this->stronaNazwa='strona_glowna';
  19. }
  20. else
  21. {
  22. $this->stronaNazwa=$_GET['strona'];  
  23.  }
  24. }
  25.  
  26. function pobierzDane()
  27. {
  28.  $pobierz=mysql_query("SELECT * FROM ".$this->tabelaDanych." WHERE nazwa='".$this->stronaNazwa."'");
  29.  if(!$pobierz)
  30.  {
  31.  print('Error: '.mysql_error());
  32.  }
  33.  else
  34.  {
  35.  while($strona=mysql_fetch_array($pobierz))
  36.  {
  37.  $this->stronaId=$strona['id'];
  38.  $this->stronaTytul=$strona['tytul'];
  39.  $this->stronaTresc=$strona['tresc'];
  40. }
  41.  }
  42.  
  43. }
  44. }
  45.  
  46. ?>


teraz szablon:

  1. <?
  2.  
  3. class Szablon
  4. {
  5.  
  6. var $plikSzablonu; //zawiera scieszke do plik uz szablonem
  7. var $zawartosc;  //zawiera tresc plik uszablonu
  8. var $tagi=array('/{tytul}/', '/{tresc}/');
  9. var $wartosci=array();
  10.  
  11.  
  12. function ustawPlik($nazwaPlikuSzablonu)
  13. {
  14. $this->plikSzablonu=$nazwaPlikuSzablonu;
  15.  
  16. }
  17.  
  18.  
  19. function czytajPlik()
  20. {
  21. $this->zawartosc=file($this->plikSzablonu);
  22. }
  23.  
  24. function ustawDane($tytul, $tresc)
  25. {
  26. $this->wartosci[0]=$tytul;
  27. $this->wartosci[1]=$tresc;
  28. }
  29.  
  30. function pokazSzablon()
  31. {
  32. foreach($this->zawartosc as $temp) 
  33. {
  34.  print(preg_replace($this->tagi, $this->wartosci, $temp));
  35. }
  36.  
  37. }
  38. }
  39.  
  40. ?>


teraz pozlepiajmy t oido kupy czyli index.php:

  1. <?
  2.  
  3. include('db.klasa.php');
  4. $baza=new polaczenieDb;
  5. $baza->polacz();
  6.  
  7.  include('danestrony.klasa.php');
  8.  $dane=new daneStrony;
  9.  $dane->tabelaDanych='podstrona';
  10.  $dane->pobierzDane();
  11.  
  12.  $baza->rozlacz();
  13.  
  14. include('szablon.klasa.php');
  15. $szablon= new szablon;
  16. $szablon->ustawPlik('szablon/index.html');
  17. $szablon->czytajPlik();
  18. $szablon->ustawDane($dane->stronaTytul, $dane->stronaTresc); 
  19.  
  20. $szablon->pokazSzablon();
  21.  
  22. ?>
  23.  


a ijeszcze plik html czyli jak ma wygladac strona:

  1. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  2.      {tytul}
  3. </head>
  4.      {tresc}
  5. </body>
  6. </head>


no i co otym sądzicie?
TomASS
Cześć - na początku chciałbym Cię poprosić abyś zanim nacisniesz 'Wyślij posta' przeczytł go jeszcze raz i poprawił błędy ortograifczne/stylistyczne - ciężko się takiego posta czyta tongue.gif


Teraz do rzeczy:
Cytat
-kod jest bardzje czytelny
-łatwiej go wykorzystać kilka razy lub
prz yinnych projekatch

Po to właśnie min. wymyślono OOP smile.gif Aby programowan ie bardzioej zbliżyć do 'rzeczywistości' smile.gif
Cytat
-po napisaniu bardzo prostej klasy szabonow czlowiek inaczej patrzy na programowanie i zastanawi sie czem uodrazu tak nie robił

Prawda? smile.gif
Cytat
przepraszam za 3 post z rzedu:/

Zarejestruj się to nie będziesz miał takiego problemu.

Teraz co do klasy:
  1. <?php
  2. var $dbhost;
  3. var $dbuser;
  4. var $dbpassword;
  5. var $dbname;
  6. ?>

A ja znowusz uparcie twierdze ze to powinno być 'private' !
  1. <?php
  2. function polacz()
  3. function rozlacz()
  4. ?>

A to np. 'public'

  1. <?php
  2. function polaczenieDb()
  3.         {
  4.             $this->dbhost='localhost';
  5.             $this->dbuser='root';
  6.             $this->dbpassword='password';
  7.             $this->dbname='mydb';
  8.         }
  9. ?>

Świetnie, że używasz konstruktora - tylko lepiej go nazywać __construct() (jeśli używasz PHP5)

  1. <?php
  2. function rozlacz()
  3. ?>

To wrzuć do destruktora.

  1. <?php
  2.  if(!mysql_connect($this->dbhost, $this->dbuser, $this->dbpassword))
  3.             {
  4.                 print('Error: '.mysql_error());
  5.             }
  6. ?>

W takim przypadku ładniej używać wyjątków smile.gif
Do tej klasy dodałbym jeszcze obsługę zapytań - pobieranie rekordów itp.


Druga klasa, oprócz tego samego co powyżej:

  1. <?php
  2.   if(!isset($_GET['strona']))
  3.             {
  4.                 $this->stronaNazwa='strona_glowna';
  5.             }
  6. ?>

Jeżeli $this->stronaNazwa ma być używane w zapytaniu SQL to dodałbym jeszcze do tego mysql_escape_string.

  1. <?php
  2. $pobierz=mysql_query("SELECT * FROM ".$this->tabelaDanych." WHERE nazwa='".$this->stronaNazwa."'");
  3. ?>

Wykonywanie zapytań wrzuciłbym właśnie do poprzedniej klasy, czyli byś miał:
polaczzBD->zapytanie(....);

  1. <?php
  2. $this->zawartosc=file($this->plikSzablonu);
  3. ?>

Sprawdź czy plik istnieje smile.gif

  1. <?php
  2.   foreach($this->zawartosc as $temp) 
  3. ?>

sprwadź czy $this->zawartosc nie jest pustą tablicą.


Powodzenia smile.gif
Gość_Suchy
zastanawiam się nad wrzuceniem tego zapytania do poprzedniej klasy. Ale kurcze jagby to miało wygladac? i czy ta klasa odpowiadałaby tylko za to jedno zapytanie (pobieranie danych do szablonu) czy ogulnie za zapytania ?


a swoja droga czy jest sens trzymacia całych stron w bazie danych, tzn tytułu i zawartosci , a potem tylko pobranie ich i wyświetlenie ?
TomASS
Cytat
i czy ta klasa odpowiadałaby tylko za to jedno zapytanie (pobieranie danych do szablonu) czy ogulnie za zapytania ?

Ogólnie za wykonywanie zapytań smile.gif

Cytat
a swoja droga czy jest sens trzymacia całych stron w bazie danych, tzn tytułu i zawartosci , a potem tylko pobranie ich i wyświetlenie ?

Jakiś sens ma smile.gif Najlepiej to chyba szablon smile.gif
Master Miko
@Suchy:

1. Zarejestruj się biggrin.gif (hehehe już poprawiam biggrin.gif )

2. Trzymanie całych stron w bazie danych?
Jeżeliby to podzielić na newsy, jakiś conetent, strony specjalne to fajna sprawa. Dajesz do tego tylko obudówkę z tpl (Twoja klasa się do tego dobrze nadaje smile.gif ) no i śmiga. Tylko najlepiej jest to jakoś "ukryć"

Ja np. zrobiłem ostatnio klasę "trzy stopniową" (nie wiem czy wydajne.. ale działa)

tzn. instnieje główna klasa main... ona służy do loadowania inny klas.... np. box... natomiast klasa box tworzy klasę templete, która praseuje plik jakiś plik .tpl... dziwnie to brzmi dziwnie może zrobione... ale naprawdę ładnie wygląda biggrin.gif
Suchy
czemu akurat pliki .tpl ?
Master Miko
może nazywać się jak tylko chcesz... ale tpl to taka fajnie pro^ nazwa biggrin.gif
tzn w wielu systemach się tak nazywa.
Suchy
ehhe ale zastanawia mnie czemu to przewaznie jest tpl? czy nazwa rozszezenia wskazuje na template ? nie wiem ;] a oże to rozszerzenie ma cos szczegolnego w sobie?
Master Miko
niet. zwykły plik tekstowy. tpl od template
woow gorący temat się zrobił tongue.gif
Suchy
witam ponownie.

mając tąklase szablonu:

  1. <?
  2.  
  3. class Szablon
  4. {
  5.  
  6. var $plikSzablonu; //zawiera scieszke do plik uz szablonem
  7. var $zawartosc;  //zawiera tresc plik uszablonu
  8. var $tagi=array('/{tytulNewsa}/', '/{trescNewsa}/');
  9. var $wartosci=array();
  10.  
  11.  
  12. function ustawPlik($nazwaPlikuSzablonu)
  13. {
  14. $this->plikSzablonu=$nazwaPlikuSzablonu;
  15.  
  16. }
  17.  
  18.  
  19. function czytajPlik()
  20. {
  21. $this->zawartosc=file($this->plikSzablonu);
  22. }
  23.  
  24. function ustawDane($tytul, $tresc)
  25. {
  26. $this->wartosci[0]=$tytul;
  27. $this->wartosci[1]=$tresc;
  28. }
  29.  
  30. function pokazSzablon()
  31. {
  32. foreach($this->zawartosc as $temp) 
  33. {
  34.  print(preg_replace($this->tagi, $this->wartosci, $temp));
  35. }
  36.  
  37. }
  38. }
  39.  
  40. ?>


chciałbym zrobić, żeby zamiast {trescNewsa} i {tytulNewsa} wstawiły się newsy, ale nie jeden tylko np 5. Gdzie wstawic odpowiednia pętle czy coś innego?
banpl
korzystając z topicu,
jako raczkujący w OOP chciałbym się spytać co mozna oprzec na OOP, np clasa ktora wyswietla newsy, czy mozna takei cos zrobixc, czy to ulatwia zycie, co powinno byc zawarte w takiej klasie questionmark.gif

moze to i glupie pytanie, ale lepiej wiedziec wiecej niz za malo tongue.gif
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.