Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

4 Stron V   1 2 3 > »   
Reply to this topicStart new topic
> [PHP]skrypt w OOP, Czy dobrze??
marcio
post 8.03.2008, 19:56:46
Post #1





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

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


Witam tak jak kiedys napisalem chce sie nauczyc OOP i robie sa prosta ksiege

OTO KOD:
  1. <?php
  2.  
  3. include('config.php');
  4.  
  5. class Ksiega {
  6.  
  7. public $data, $ip, $host, $nick, $message;
  8. private $pasy, $action, $method, $db;
  9.  
  10. public function __construct($nick, $message, $action, $method) {
  11.  
  12. global $pasy;
  13.  
  14. $this -> action = $action;
  15. $this -> method = $method;
  16. $this -> data = date('j/n/Y H:i:s');
  17. $this -> nick = htmlspecialchars(addslashes($nick));
  18. $this -> message = htmlspecialchars(addslashes($message));
  19. $this -> ip = $_SERVER['REMOTE_ADDR'];
  20. $this -> host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  21. $this -> pasy = $pasy;
  22. }
  23.  
  24.  
  25. public function db_connect() {
  26.  
  27. if($this -> db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) {
  28. mysql_select_db($this->pasy['baza']);
  29. return true;
  30. }
  31.  
  32. else return false;
  33.  
  34. }
  35.  
  36.  
  37. public function db_close() {
  38.  
  39. mysql_close($this -> db);
  40.  
  41. }
  42.  
  43.  
  44. public function new_query($query) {
  45.  
  46. $this -> db_connect();
  47. if($result = mysql_query($query))
  48. return $result;
  49.  
  50. else return die(mysql_error());
  51. $this -> db_close();
  52.  
  53. }
  54.  
  55.  
  56. public function show_form() {
  57.  
  58. echo('<html>
  59. <head><meta http-equiv="content-type" charset="utf-8" /><title>GuEsT bY MARCIO</title>
  60. <style type="text/css">
  61. a {color:#FDEDF2}
  62. body {color:#FDEDF2}
  63. </style>
  64. </head>
  65. <body bgcolor="#000000">
  66. <center><img src="gora.jpg" width="1240" height="100" alt="obrazek"/></center>
  67. <table align="center" width="75%">
  68. <form action="'.$this -> action.'" method="'.$this -> method.'">
  69. <tr><td align="center"><input type="text" name="nick" size="71" value="Nick" style="font-style:italic; background-color:#000000; color:#00A54E; border-color: #000000; border: #000000;"/></td></tr>
  70. <tr><td align="center"><textarea name="message" rows="3" cols="70" style="font-style:italic; background-color:#000000; color:#00A54E; border-color: #000000; border: #000000;">Tutaj wpisz wiadomosc</textarea></td></tr>
  71. <tr><td align="center"><input type="submit" name="dodaj" value="Dodaj wpis" style="font-style:italic; background-color:#000000; color:#00A54E; border-color: #000000; border: #000000;" /></td></tr>
  72. </form></table>
  73. </body><html>'); 
  74. }
  75.  
  76.  
  77. public function add_reply() {
  78.  
  79.  $this -> show_form();
  80.  
  81.  if(!empty($_POST['nick']) && !empty($_POST['message']) && isset($_POST['dodaj'])) {
  82.  
  83.  setcookie("Spamer", "Spam", time() + 300);
  84.  $zapytanie = ("insert into ksiega_gosci(nick,message,data,ip,kod) values('$this->nick', '$this->message', '$this->data', '$this->ip', '')");
  85.  
  86. if($_COOKIE['Spamer'] != "Spam") {
  87.  
  88. $this -> new_query($zapytanie);
  89. $host = $_SERVER['HTTP_HOST'];
  90. $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/');
  91.  
  92. }
  93.  
  94. else {
  95.  
  96. echo('<script>alert("Spadaj spamerze musisz odczekac 5min :)");</script>');
  97.  
  98. }
  99. }
  100.  
  101.  else echo('<script>alert("Prosze wypelnic formularz");</script>'); 
  102.  
  103.  }
  104.  
  105.  
  106. public function show_reply($liczba = 30) {
  107.  
  108. $query = ("select * from ksiega_gosci");
  109. $wynik = $this->new_query($query);
  110. $num = mysql_num_rows($wynik);
  111. $ile = ceil($num/30);
  112.  
  113. if(!isset($_GET['strona'])) $_GET['strona'] = 0;
  114.  
  115. $strona = (int)$_GET['strona'];
  116. $id = (int)$_GET['id'];
  117. $query1 = ("select * from ksiega_gosci order by id desc limit ".$strona*$liczba.",".$liczba);
  118. $wynik1 = $this->new_query($query1);
  119. while($tab = mysql_fetch_assoc($wynik1)) {
  120.  
  121. echo('<table border="1" width="75%" align="center" style="border: 1px dotted red;"><tr><td width="40%">Dodal: '.stripslashes($tab['nick']).'</td><td width="26%">Dnia:'.$tab['data'].'</td></tr>
  122. <tr><td><b>'.stripslashes($tab['message']).'</b></td></tr></table></form>');
  123.  
  124. }
  125.  
  126. if(mysql_num_rows($wynik) == 0) {
  127.  
  128. echo('<script>alert("Nie ma wpisow");</script>');
  129. }
  130.  
  131. echo('<Br><center><b>Strona: '.($strona).' z '.($ile).'</b></center>');
  132.  
  133. if(is_numeric($strona) && !empty($strona) && $strona > 0) {
  134.  
  135. echo('<center><a href="?strona='.($strona-1).'"><img src=\'rev.gif' /></a> ');
  136.  
  137. }
  138.  
  139.  
  140. if(is_numeric($strona) && !empty($strona) && $strona < $ile) {
  141.  
  142. echo('<a href="?strona='.($strona+1).'"><img src='next.gif' /></a></center>');
  143.  
  144. }
  145.  
  146. else {
  147.  
  148. echo('<center><a href="?strona='.($strona+1).'"><img src='next.gif' /></a></center>');
  149.  
  150. }
  151.  
  152. echo('<table align="center" style="border: 1px dotted red;"><tr><td align="center">');
  153.  
  154. for($i = 0; $i < $ile; $i++) 
  155. echo('<a href="?strona='.$i.'">['.$i.']</a> ');
  156. echo('</td></tr></table>');
  157.  
  158. }
  159. };
  160.  
  161. $ksiega = new Ksiega($_POST['nick'], $_POST['message'], 'new_klasa.php', 'post');
  162. $ksiega -> add_reply();
  163. $ksiega -> show_reply();
  164.  
  165. echo('<Br><div style="background:#FFFFFF;color:#000000;text-align:center;border:2px solid:white;"><code><b>Powered by Marcio. GG(4854727)</b><img src="http://www.gadu-gadu.pl/users/status.asp?id=4854727&styl=1"/><Br><a style="color:#000000" href="http://ekmll.com" TARGET="_blank">My site</a></code></div>');
  166. ?>

NIe chce zebys ktos z was analizowal kod linijka po linicje po kod dziala lecz tak patrzac na oko czy kod jest zgdony z OOP czyli czy nie jest to tak jak wy to nazywacie pseudo OOP jesli tak to bylbym wdzeczny jak ktos by pokazal jak by to mialo wygladac w czystym OOP nie zeby mi pisal na nowo kod ale zeby pokazal np jak powinna wygldac funkcja add_reply() albo ktora z nich

Oprocz tego mam jeszcze kilka pytan bylbym wdzieczny jak by ktos na nie odpowiedzial nie musi odpowiadac na wszystkie

1.DO czego sluzy klasa interface??BO nie zrozumialem
2.Do czego sluzy abstract??
3.Do czego sluzy static??

I potem mam jeszcze jedno pytanie czytalem kurs na temat OOP
Czyli w OOP do obiektow mozna sie odwolywac za pomoca pol i metod jednak gdy zmienne klasowe sa publiczne gdy sa typu private albo protected to tylko za pomoca metod dobrze mowie??
Jednak chcialbym sie zapytac czy ktos z was bedzie tak mily i by mi pokazal roznice pomiedzy odwolywaniem sie do obiektow za pomoca pol i metod smile.gif bo pomieszalo mi sie teraz wszystko i juz nie wiem co jest czym...

Ten post edytował marcio 8.03.2008, 20:00:57


--------------------
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
Piniek
post 8.03.2008, 19:58:56
Post #2





Grupa: Przyjaciele php.pl
Postów: 463
Pomógł: 49
Dołączył: 27.12.2007
Skąd: Warszawa

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


po pierwsze nie umieszczaj kodu html w klasie i wedlug mnie jest to kod strukturalny zamkniety w klasy

Ten post edytował Piniek 8.03.2008, 20:04:05


--------------------
Go to the top of the page
+Quote Post
marcio
post 8.03.2008, 20:02:22
Post #3





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

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


P.S co sie stalo z bbcode'em pierwszy raz mi sie tak dzieje??


--------------------
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
Jarod
post 8.03.2008, 20:38:25
Post #4





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Ehh... global..


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
marcio
post 8.03.2008, 20:50:26
Post #5





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

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


To moze ktos pokarze dlaczeg jest to tylko skladnia OOP a pisze strukturalnie bo sam nie wiem tez chce sie nauczyc ze nie rozumiem jeszcze jak pisac w OOP w 100%


--------------------
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
Cysiaczek
post 8.03.2008, 21:03:59
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Obejrzyj kod jakiegoś frameworka, albo zobacz, jak wyglądają klasy wygenerowane przez Propel. Obecnie mogę jedeynie powiedzieć, że jeśli ten kod działa poprawnie, to ok, ale z oop nic, ale to zupełnie nic nie ma wspólnego. Proponuję dobrą książkę na początek, bo bez tego ani rusz. Opis tej klasy:

Klasa sprawdza, czy dane są poprawne i usuwa z nich potencjalnie niebezpieczny kod. Łączy się z bazą danych. Może wyświetlić formularz, albo dodać wpis do bazy danych, albo pokazać dodany wpis. Wysyła też cookie, jak już wpis został dokonany.

Twoja klasa robi zatem tyle, ile przeciętny framework. Masę zbędnych rzeczy, które nijak nie są związane z meritum sprawy, czyli wpisem do księgi

Poniżej klasa księgi gości wg. Propel (3 minuty pracy)
http://rafb.net/p/6itcTx76.html
  1. <?php
  2. $entry=new GuestBook();
  3. $entry->setNick('nick');
  4. $entry->setContent('message');
  5. $entry->setIp('IP');
  6. $entry->setCreationDate(time());
  7. $entry->save();
  8. ?>


To wszystko.

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
marcio
post 8.03.2008, 21:13:18
Post #7





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

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


o0..trudne to jest wiesz mysle ze odrazu nie napisze skryptu w OOP ale bylbym wdzieczny jakbys ty lub ktos inny mogl pokazac tak na szybko chodzi mi o szkic jak powinna wygladac moja klasa lub dana funckja nie mowimy o 100% OOP ale zeby przynajmniej zblizyc sie do jego idee bo ja jak narazie mam tam tylko skladnie OOP


--------------------
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
Cysiaczek
post 8.03.2008, 21:27:27
Post #8





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Tylko, że tego się nie pisze, tylko generuje. Samo się generuje - z czegoś takiego

Kod
  guest_book
    _attributes:  { phpName: GuestBook }
    id:
    nick:
      type: VARCHAR
      size: 32
    content:
      type: LONGVARCHAR
    email:
      type: VARCHAR
      size: 32
    creation_date:
      type: TIMESTAMP
    ip:
      type: VARCHAR
      size: 16


Ideą jest natomiast ten fragment kodu, który Ci pokazałem, a który używa tej klasy.

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
marcio
post 8.03.2008, 21:38:22
Post #9





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

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


No ok dzieki ale to mi w niczym nie pomaga bo klasa jest skomplikowana a sam wygenerowany kod tez mi w niczym nie pomoga przynajmniej ja nie widze jak moglby mi pomoc...

Chodzi mi to czy ktos z was moze powiedziec co musze zmienic i jak zeby ten kod przypominal OOP


--------------------
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
Cysiaczek
post 8.03.2008, 22:01:42
Post #10





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Nie da się tego kodu zmienić. należy go napisać zupełnie inaczej. Pokazałem Ci tą klasę, abyś zobaczył, że OOP to ładne, spójne interfejsy, a nie kod html w metodach. Pierwsza zasada - obiekt ma robić tylko to, na co wskazuje jego nazwa i krótki opis. Twoja klasa to jak samochod, który ma w standardzie obok kół i silnika, możliwość puszczania latawca i parzenie kawy. Potrzebne to do jeżdżenia?

Pozdrawiam i jeszcze raz polecam książkę. Czasami 50 zł trzeba zainwestować.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
marcio
post 8.03.2008, 22:27:27
Post #11





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

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


@Cysiaczek na ksiazki sknera nie jestem mam w domu kolo 20 ksiazek na temat programowania i jedna do php "Tworzenie stron www vademceum profesjonalisty php+mysql" a teraz jestem za granica ogolnie teraz przejrze ten link co podales i dam tu to co wykombinuje smile.gif

Wszedzie w klasach widze funckje ktore zwracaja atrubut np pod moja klase takie cos
  1. <?php
  2. public function get_nick() {
  3.  
  4. return $this->nick;
  5. }
  6. ?>

Zastanawiaja mnie natomiast 2 rzeczy do czego sie to przydaje i i czy jest zaleta uzywanie tego??


--------------------
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
zlw
post 9.03.2008, 10:28:32
Post #12





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 30.04.2007
Skąd: WWA

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


Cytat(marcio @ 8.03.2008, 22:27:27 ) *
Wszedzie w klasach widze funckje ktore zwracaja atrubut np pod moja klase takie cos
  1. <?php
  2. public function get_nick() {
  3.  
  4. return $this->nick;
  5. }
  6. ?>

Zastanawiaja mnie natomiast 2 rzeczy do czego sie to przydaje i i czy jest zaleta uzywanie tego??


Chodzi o to, żeby nie tworzyć jednej, wielkiej metody, która robi wszystko, ale kilka mniejszych które (jak w przykładzie) zwracają pewne wartości (lub np. zamieniają BBCode na HTML, usuwają niebezpieczne wyrażenia itp.) oraz taką która coś z tymi zwracanymi wartościami robi (dodaje do bazy, wyświetla itp.)

A co do drugiego pytania - "czy się przydaje?". Oczywiście! Ponieważ gdy w przyszłości wystapi błąd, będziesz chciał zmienić działanie klasy/metody nie musisz grzebać w setkach linii kodu.

Ten post edytował zlw 9.03.2008, 10:29:58


--------------------
Krzysztof Zalewski :: blog

----------------------------------------------------------------------------------------

Go to the top of the page
+Quote Post
marcio
post 9.03.2008, 14:28:39
Post #13





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

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


No ok @zlw wiec poczytalem troche kurs'ow i przykladowych kodow na tym forum i zrobilem cos takiego
  1. <?php
  2. public function get($name) {
  3.  
  4. return $this -> name;
  5.  
  6. }
  7.  
  8. public function set($name, $wartosc) {
  9.  
  10. $this ->name = $wartosc;
  11.  
  12. }
  13. ?>

Funckja get do zwracania wartosci set do ustawiana i teraz zapisuje sobie do bazy nowy wpis:
  1. <?php
  2. $zapytanie = ("insert into ksiega_gosci(nick,message,data,ip,kod) values('$this->nick', '$this->message', '$this->data', '$this->ip', '')");
  3. ?>

I teraz probowalem to wywolywac i robie tak
  1. <?php
  2. $zapytanie = ("insert into ksiega_gosci(nick,message,data,ip,kod) values('$this->get($this->nick)', '$this->get($this->message)', '$this->data', '$this->ip', '')");
  3. ?>

I tak patrze a przy wyswieltaniu i zapisywaniu do bazy dodaje () czyli jak wpisze jako nick marcio to sie nie wyswietli marcio a (marcio) dlaczego tak sie dzieje??

Cytat
Chodzi o to, żeby nie tworzyć jednej, wielkiej metody, która robi wszystko, ale kilka mniejszych które (jak w przykładzie) zwracają pewne wartości (lub np. zamieniają BBCode na HTML, usuwają niebezpieczne wyrażenia itp.) oraz taką która coś z tymi zwracanymi wartościami robi (dodaje do bazy, wyświetla itp.)

A co do drugiego pytania - "czy się przydaje?". Oczywiście! Ponieważ gdy w przyszłości wystapi błąd, będziesz chciał zmienić działanie klasy/metody nie musisz grzebać w setkach linii kodu.

Zlw moglbys rozwinac twoja odpiwedz bo nie zabardzo zrozumialem np jaki przyklad albo cos?


--------------------
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
Cysiaczek
post 9.03.2008, 15:09:54
Post #14





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




  1. <?php
  2. public function get($name) {
  3.  
  4. return $this -> name;
  5.  
  6. }
  7. $this->get($this->message)
  8. ?>

questionmark.gif?
  1. <?php
  2. public function get($name) {
  3.  
  4. return $this ->$name;
  5.  
  6. }
  7. $this->get('message')
  8. ?>


Masz duże braki w znajomości API języka. Nie myśl, że się czepiam Ciebie ciągle i coś wypominam bez powodu. Powód mam - nie napiszesz nic obiektowo, jeśli nie będziesz rozumiał tego, co robisz. Teraz na wszelkie tłumaczenie zawiłości oop jest moim zdaniem za wcześnie. Obiektowość jest niezależna od języka. Tak samo się projektuje klasy i obiekty w Javie i Rubym, .NET i C++ itd. To, że masz 20 książek o programowaniu, to niewiele znaczy - Ja mam 5. Nie masz wśród nich książki o programowanie obiektowym.

Tak zupełnie, ale naprawdę zupełnie poważne i życzliwie radzę Ci - teoria to podstawa - opanuj ją.
~zlw powiedział dokładnie to samo, co ja w poprzednich postach - małe klasy o ograniczonej funkcjonalności.

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
marcio
post 9.03.2008, 15:20:52
Post #15





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

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


Powiem tak ksiazki o OOP nie mam tzn mam ksiazki do C/C++ ale C++ nie znam JAVY czy tam C# tez nie ucze sie C gdzie obiektywnosc jest o wiele trudniejsza i sie jej nie ucze a w php proceduralnie sobie radze i chcialem sie nauczc OOP bo widze ze piszac cms'a mam duzo lini kodu moglbym to napisac na funckjach albi i tak ilosc kodu o duzo sie nie zmniejszy i chce sie nauczyc klas ale kompltnie ich nie rozumie tam jeszcze jej skladnie to troche rozumiem ale nie wiem jak pisac obiektowo dlatego chcialem jakis latwy przyklad etc..


--------------------
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
Piniek
post 9.03.2008, 15:40:17
Post #16





Grupa: Przyjaciele php.pl
Postów: 463
Pomógł: 49
Dołączył: 27.12.2007
Skąd: Warszawa

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


dam ci link do artykułu http://kavuka.pl/blog/show/entry_11-Jestes_OOP winksmiley.jpg bardzo ciekawy winksmiley.jpg

mam nadzieje Cysiaczek ze sie nie obrazisz ze to ja dalem tego linka winksmiley.jpg z reszta do twojego blog-a ;P


--------------------
Go to the top of the page
+Quote Post
Cysiaczek
post 9.03.2008, 15:46:41
Post #17





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




eheheh. To samo próbuję wytłumaczyć tutaj, w temacie. Nie da rady pisać OOP bez teorii i żadne przykłady nie pomogą (zwlaszcza, że dałem już jeden, który jest niemal doskonały).


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
marcio
post 9.03.2008, 16:31:08
Post #18





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

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


Czy jestem chociaz na taki etapie??
Cytat
Uważam (pewnie nie tylko Ja), że istnieje etap pośredni. Jest to programowanie strukturalne ujęte w klasy.

kurde sam juz nie wiem za kazdym razem jak probuje napisac cos lub nauczyc sie czego zwiazanego z OOP to mi nie wychodzi snitch.gif


--------------------
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
Cysiaczek
post 9.03.2008, 16:36:40
Post #19





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Masz, ale teraz to już naprawdę marsz do książek
Księga gości:

Księga gości ma za zadanie zbierać wpisy od gości odwiedzających naszą stronę. Można je przeglądać i dodawać nowe.

Zaznaczone słowa to kandydaci na obiekty
1. Księga gości (GuestBook - bo zawsze używamy angielskich nazw)
2. Wpis (GuestBookEntry)
3. Gość (użytkownik, którego tu pominiemy) (GusetBookUser)
4. Obiekt kolekcji wpisów (GuestBookEntryStack)
  1. <?php
  2. class GuestBookUser
  3. {
  4.  
  5. }
  6.  
  7. class GuestBook
  8. {
  9. private $collection;
  10.  
  11. public function __construct()
  12. {
  13. $this->collection=new GuestBookEntryStack();
  14. }
  15.  
  16. public function load()
  17. {
  18. $db=DB::getInstance();
  19. $result=$db->query("SELECT * FROM guest_book");
  20. $this->collection->loadFromArray(& $result->fetchAllRows());
  21. }
  22.  
  23. public function addEntry(GuestBookEntry $entry)
  24. {
  25. $entry->create();
  26. $this->collection->add($entry);
  27. }
  28.  
  29. public function getEntries()
  30. {
  31. return $this->collection->getCollection();
  32. }
  33.  
  34. public function getLastFiveEntries()
  35. {
  36. $db=DB::getInstance();
  37. $result=$db->query("SELECT * FROM guest_book LIMIT 5 DESC");
  38. $collection=new GuestBookEntryStack();
  39. $collection->loadFromArray(& $result->fetchAllRows());
  40. return $collection->getCollection();
  41. }
  42.  
  43. public function getEntry($id)
  44. {
  45. return $this->collection->get($id);
  46. }
  47.  
  48. }
  49.  
  50.  
  51. class GuestBookEntry
  52. {
  53. private $id;
  54. private $message;
  55. private $username;
  56.  
  57. public function __construct($misc=null)
  58. {
  59. if(is_integer($misc))
  60. {
  61. $sql="SELECT * FROM guest_book WHERE id='$misc'";
  62. $db=DB::getInstance();
  63. $result=$db->query($sql);
  64. $row=$result->fetchRow();
  65. }
  66. elseif(is_array($misc))
  67. {
  68. $row=& $misc;
  69. }
  70. $this->setId($row['id']);
  71. $this->setMessage($row['message']);
  72. $this->setUsername($row['username']);
  73. }
  74.  
  75. public function getId()
  76. {
  77. return $this->username;
  78. }
  79.  
  80. public function setId($value)
  81. {
  82. $this->id=$value;
  83. }
  84.  
  85. public function getMessage()
  86. {
  87. return $this->message;
  88. }
  89.  
  90. public function setMessage($value)
  91. {
  92. $this->message=$value;
  93. }
  94.  
  95. public function getUsername()
  96. {
  97. return $this->username;
  98. }
  99.  
  100. public function setUsername($value)
  101. {
  102. $this->username=$value;
  103. }
  104.  
  105. public function create()
  106. {
  107. $sql="INSERT INTO guest_book (id, message. username) VALUES ('', '".$this->getMessage()."', '".$this->getUsername()."')";
  108. $db=DB::getInstance();
  109. if($db->query($sql))
  110. {
  111. $this->setId($db->getLastInsertId());
  112. return true;
  113. }
  114. return false;
  115. }
  116.  
  117. public function save()
  118. {
  119. $sql="UPDATE guest_book SET message='".$this->getMessage()."'. username='".$this->getUsername()."'";
  120. $db=DB::getInstance();
  121. return $db->query($sql);
  122. }
  123. }
  124.  
  125.  
  126.  
  127. class GuestBookEntryStack
  128. {
  129. private $collection=array();
  130.  
  131. public function add(GuestBookEntry $entry)
  132. {
  133. $this->collection[$entry->getId()]=$entry;
  134. }
  135.  
  136. public function has($id)
  137. {
  138. if(isset($this->collection[$id]))
  139. {
  140. return true;
  141. }
  142. return false;
  143. }
  144.  
  145. public function get($id)
  146. {
  147. return $this->collection[$id];
  148. }
  149.  
  150. public function getCollection()
  151. {
  152. return $this->collection;
  153. }
  154.  
  155. public function remove($id)
  156. {
  157. unset($this->collection[$id]);
  158. }
  159.  
  160. public function loadFromArray(array $stack)
  161. {
  162. foreach($stack as $row)
  163. {
  164. $this->add(new GuestBookEntry($row));
  165. }
  166.  
  167. }
  168.  
  169. }
  170.  
  171. /*
  172.  * Użycie:
  173.  */
  174.  
  175. $gb=new GuestBook();
  176. $gb->load();
  177. foreach($gb->getEntries() as $entry)
  178. {
  179. print $entry->getMessage().'<br />';
  180. }
  181.  
  182. // Dodajemy?
  183. $gb=new GuestBook();
  184.  
  185. $data['username']=$_POST['username'];
  186. $data['message']=$_POST['message'];
  187.  
  188. $gb->addEntry(new GuestBookEntry($data));
  189.  
  190. ?>


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
marcio
post 9.03.2008, 16:52:23
Post #20





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

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


Czyli ogolnie powinno sie tworzyc klasy dla kazdej operacji??Dzieki przeanalizuje skrypt i spruboje cos napisac smile.gif heh marsz do ksiazek tak szczerze czytam 5 kurs'ow o OOP i mecze ksiazke ale nic..... moze jestem tepy

P.S takie male pytanko tylko nie krzycz masz np takie cos
  1. <?php
  2. $db=DB::getInstance();
  3. //i to tez
  4. $this->setId($db->getLastInsertId());
  5. ?>

Etc czyli inne funckje ktorych w kodzie nie widze i czemu tak jest chyba ze nie dowidzialem tego w kodzie to sorki

Ten post edytował marcio 9.03.2008, 16:53:48


--------------------
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

4 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: 25.06.2025 - 13:18