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
Cysiaczek
post 9.03.2008, 17:17:25
Post #21





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




Bo nie będę Ci przecież wszystkich funkcji pisał. Każdy ma jakieś własne, a to jest pseudokod, więc tylko sygnalizuje pewne rzeczy. Przeceż każdy rozumie o co chodzi z getLastInsertId i dlaczego zostało użyte.

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, 18:29:30
Post #22





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

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


Wykombinowalem cos takiego bylbym wdzieczny jak ktos powie co jeszcze zle robie co moge poprawic zeby kod byl bardziej elastyczny etc

@Cysiaczek wielkie dzieki troche mi to rozjasnilo idee ale czemu tyle class?
  1. <?php
  2.  
  3. include('config.php');
  4.  
  5. class Guest {
  6.  
  7. public $data, $ip, $host, $nick, $message, $strona, $id;
  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 -> strona = (int)$_GET['strona'];
  17. $this -> id = (int)$_GET['id'];
  18. $this -> data = date('j/n/Y H:i:s');
  19. $this -> nick = htmlspecialchars(addslashes($nick));
  20. $this -> message = htmlspecialchars(addslashes($message));
  21. $this -> ip = $_SERVER['REMOTE_ADDR'];
  22. $this -> host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  23. $this -> pasy = $pasy;
  24. }
  25.  
  26.  
  27. public function getnick() {
  28.  
  29. return $this -> nick;
  30. }
  31.  
  32. public function getmsg() {
  33.  
  34. return $this -> message;
  35. }
  36.  
  37. public function getdate() {
  38.  
  39. return $this -> data;
  40. }
  41.  
  42. public function getip() {
  43.  
  44. return $this -> ip;
  45. }
  46.  
  47. public function db_connect() {
  48.  
  49. if($this -> db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) {
  50. mysql_select_db($this->pasy['baza']);
  51. return true;
  52. }
  53.  
  54. else return false;
  55.  
  56. }
  57.  
  58.  
  59. public function db_close() {
  60.  
  61. mysql_close($this -> db);
  62.  
  63. }
  64.  
  65.  
  66. public function new_query($query) {
  67.  
  68. $this -> db_connect();
  69. if($result = mysql_query($query))
  70. return $result;
  71.  
  72. else return die(mysql_error());
  73. $this -> db_close();
  74.  
  75. }
  76.  
  77.  
  78. public function num_rows($resource) {
  79.  
  80. if($result = mysql_num_rows($resource)) return $result;
  81. else return false;
  82. }
  83.  
  84. public function fetch_assoc($resource) {
  85.  
  86. if($result = mysql_fetch_assoc($resource)) return $result;
  87. else return false;
  88. }
  89.  
  90. public function addentry() {
  91.  
  92. $this -> new_query("insert into ksiega_gosci(nick,message,data,ip,kod) values('".$this -> getnick()."', '".$this -> getmsg()."', '".$this -> getdate()."', '".$this -> getip()."', '')");
  93. $host = $_SERVER['HTTP_HOST'];
  94. $uri = rtrim(dirname($_SERVER['PHP_SELF']), '');
  95.  
  96. }
  97.  
  98. public function load_reply($on_page = 15) {
  99.  
  100. $wynik1 = $this -> new_query("select * from ksiega_gosci order by id desc limit ".$this -> strona*$on_page.",".$on_page);
  101.  
  102. while($tab = $this -> fetch_assoc($wynik1)) {
  103. 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>
  104. <tr><td><b>'.stripslashes($tab['message']).'</b></td></tr></table></form>');
  105. }
  106. }
  107.  
  108. public function pager($on_page = 15) {
  109.  
  110. $wynik = $this -> new_query("select * from ksiega_gosci");
  111. $num = $this -> num_rows($wynik);
  112. $how_much = ceil($num/$on_page);
  113.  
  114. if(!isset($this -> strona)) $this -> strona = 0;
  115.  
  116. if($this -> num_rows($wynik) == 0) {
  117.  
  118. echo('<script>alert("Nie ma wpisow");</script>');
  119. }
  120.  
  121. echo('<Br><center><b>Strona: '.($this -> strona).' z '.($how_much-1).'</b></center>');
  122.  
  123. if(is_numeric($this -> strona) && !empty($this -> strona) && $this -> strona > 0) {
  124. echo('<center><a href="?strona='.($strona-1).'"><img src='rev.gif' /></a> ');
  125.  
  126. }
  127.  
  128. if(is_numeric($this -> strona) && !empty($this -> strona) && $this -> strona < $how_much) {
  129. echo('<a href="?strona='.($this-> strona+1).'"><img src='next.gif' /></a></center>');
  130.  
  131. }
  132.  
  133. else {
  134. echo('<center><a href="?strona='.($this -> strona+1).'"><img src='next.gif' /></a></center>');
  135.  
  136.  }
  137.  
  138. echo('<table align="center" style="border: 1px dotted red;"><tr><td align="center">');
  139.  
  140. for($i = 0; $i < $how_much; $i++) 
  141. echo('<a href="?strona='.$i.'">['.$i.']</a> ');
  142. echo('</td></tr></table>');
  143.  
  144. }
  145.  
  146. public function Wyswietl_form() {
  147.  
  148. echo('<html>
  149. <head><meta http-equiv="content-type" charset="utf-8" /><title>GuEsT bY MARCIO</title>
  150. <style type="text/css">
  151. a {color:#FDEDF2}
  152. body {color:#FDEDF2}
  153. </style>
  154. </head>
  155. <body bgcolor="#000000">
  156. <center><img src="gora.jpg" width="1240" height="100" alt="obrazek"/></center>
  157. <table align="center" width="75%">
  158. <form action="'.$this -> action.'" method="'.$this -> method.'">
  159. <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>
  160. <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>
  161. <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>
  162. </form></table>
  163. </body><html>'); 
  164. }
  165.  
  166.  
  167. public function Add_New_reply() {
  168.  
  169.  $this -> Wyswietl_form();
  170.  
  171.  if(!empty($this -> nick) && !empty($this -> message) && isset($_POST['dodaj'])) {
  172.  
  173.  setcookie("Spamer", "Spam", time() + 300);
  174.  
  175.  if($_COOKIE['Spamer'] != "Spam") {
  176.  
  177.  $this->addentry();
  178.  }
  179.  
  180.  else echo('<script>alert("Spadaj spamerze musisz odczekac 5min :)");</script>');
  181.  
  182.  }
  183.  }
  184.  
  185.  
  186. public function Show_All_reply() {
  187.  
  188. $this -> load_reply();
  189. $this -> pager();
  190. }
  191. };
  192.  
  193. $ksiega = new Guest($_POST['nick'], $_POST['message'], 'new_klasa.php', 'post');
  194. $ksiega -> Add_New_reply();
  195. $ksiega -> Show_All_reply();
  196.  
  197. 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>');
  198. ?>

Mam pytanie co zrobic z tym kodem html??

Ten post edytował marcio 9.03.2008, 18:37: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
l0ud
post 9.03.2008, 18:46:58
Post #23





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


marcio, ale dlaczego tym kodem robisz właściwie wszystko? Umieszczanie metod obsługujących bazę to jest przesada - od tego powinien być inny obiekt. Co do kodu html, to powinieneś oddzielić go poprzez jakiś system szablonów, a na pewno nie zawierać w klasie w ten sposób.


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
marcio
post 9.03.2008, 19:01:37
Post #24





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

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


@l0ud a moglbys pokazac mniej wiecej jak ma wygladac taki system szablonow??Tzn szukam ale znalesc nic ciekawego i prostego nie potrafie

P.S funckje dla bazy mam dac do innej klasy tylko jak je potem polaczyc??Zeby te funckje do mysql dzialaly w innej klasie??Wystarczy samo publuc przy funckjach czy jak??


--------------------
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
Xniver
post 9.03.2008, 23:30:52
Post #25





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


Zobacz sobie Open Power Template albo Smarty

Cytat
P.S funckje dla bazy mam dac do innej klasy tylko jak je potem polaczyc??Zeby te funckje do mysql dzialaly w innej klasie??Wystarczy samo publuc przy funckjach czy jak??

Masz tu przykład:
  1. <?php
  2. class Db
  3. {
  4. static protected $instance = null;
  5.  
  6. static public function getInstance()
  7. {
  8. if(self::$instance === null)
  9. {
  10. self::$instance = new Db;
  11. }
  12.  
  13. return self::$instance;
  14. }
  15.  
  16. public function connect()
  17. {
  18. // Łączenie
  19. }
  20. // itd
  21. }
  22.  
  23. // Przykład korzystania
  24. $query = Db::getInstance()->query('SELECT * FROM test');
  25.  
  26. // 2 przykład
  27. $db = Db::getInstance();
  28.  
  29. $query = $db->query('SELECT * FROM test');
  30. ?>


Ten post edytował Xniver 9.03.2008, 23:50:40
Go to the top of the page
+Quote Post
marcio
post 10.03.2008, 00:03:43
Post #26





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

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


OK Xniver wielkie dzieki zaraz lukne co robi ten self:: bo parent:: wywoluje metoda z glownej klasy dobrze mowie??

Mam jednak problem probuje zrobic to na 2 klasach i robie tak
  1. <?php
  2. include('config.php');
  3.  
  4. class Mysql_option {
  5.  
  6. public $db, $pasy;
  7.  
  8. public function __construct() {
  9.  
  10. $this -> db = $db;
  11. $this -> pasy = $pasy;
  12.  
  13. }
  14.  
  15. public function db_connect() {
  16.  
  17. if($this ->db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) {
  18. mysql_select_db($this->pasy['baza']);
  19. return true;
  20. }
  21.  
  22. else return false;
  23.  
  24. }
  25.  
  26.  
  27. public function db_close() {
  28.  
  29. mysql_close($this -> db);
  30.  
  31. }
  32.  
  33.  
  34. public function new_query($query) {
  35.  
  36. $this -> db_connect();
  37. $this -> new_query = $query;
  38. if($result = mysql_query($this -> new_query))
  39. return $result;
  40.  
  41. else return die(mysql_error());
  42. $this -> db_close();
  43.  
  44. }
  45.  
  46.  
  47. public function num_rows($resource) {
  48.  
  49. $this -> new_resource = $resource;
  50. if($result = mysql_num_rows($this -> new_resource)) return $result;
  51. else return false;
  52. }
  53.  
  54. public function fetch_assoc($resource) {
  55.  
  56. $this -> new_resource = $resource;
  57. if($result = mysql_fetch_assoc($this -> new_resource)) return $result;
  58. else return false;
  59. }
  60. };
  61.  
  62.  
  63. class Guest extends Mysql_option {
  64.  
  65. private $data, $ip, $host, $nick, $message, $strona, $id, $action, $method;
  66.  
  67. public function __construct($nick, $message, $action, $method) {
  68.  
  69. $this -> action = $action;
  70. $this -> method = $method;
  71. $this -> strona = (int)$_GET['strona'];
  72. $this -> id = (int)$_GET['id'];
  73. $this -> data = date('j/n/Y H:i:s');
  74. $this -> nick = htmlspecialchars(addslashes($nick));
  75. $this -> message = htmlspecialchars(addslashes($message));
  76. $this -> ip = $_SERVER['REMOTE_ADDR'];
  77. $this -> host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  78. $this -> pasy = $pasy;
  79. }
  80.  
  81.  
  82. public function getnick() {
  83.  
  84. return $this -> nick;
  85. }
  86.  
  87. public function getmsg() {
  88.  
  89. return $this -> message;
  90. }
  91.  
  92. public function getdate() {
  93.  
  94. return $this -> data;
  95. }
  96.  
  97. public function getip() {
  98.  
  99. return $this -> ip;
  100. }
  101.  
  102. public function addentry() {
  103.  
  104. $this -> new_query("insert into ksiega_gosci(nick,message,data,ip,kod) values('".$this -> getnick()."', '".$this -> getmsg()."', '".$this -> getdate()."', '".$this -> getip()."', '')");
  105. $host = $_SERVER['HTTP_HOST'];
  106. $uri = rtrim(dirname($_SERVER['PHP_SELF']), '');
  107.  
  108. }
  109.  
  110. public function load_reply($on_page = 15) {
  111.  
  112. $wynik1 = $this -> new_query("select * from ksiega_gosci order by id desc limit ".$this -> strona*$on_page.",".$on_page);
  113.  
  114. while($tab = $this -> fetch_assoc($wynik1)) {
  115. 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>
  116. <tr><td><b>'.stripslashes($tab['message']).'</b></td></tr></table></form>');
  117. }
  118. }
  119.  
  120. public function pager($on_page = 15) {
  121.  
  122. $wynik = $this -> new_query("select * from ksiega_gosci");
  123. $num = $this -> num_rows($wynik);
  124. $how_much = ceil($num/$on_page);
  125.  
  126. if(!isset($this -> strona)) $this -> strona = 0;
  127.  
  128. if($this -> num_rows($wynik) == 0) {
  129.  
  130. echo('<script>alert("Nie ma wpisow");</script>');
  131. }
  132.  
  133. echo('<Br><center><b>Strona: '.($this -> strona).' z '.($how_much-1).'</b></center>');
  134.  
  135. if(is_numeric($this -> strona) && !empty($this -> strona) && $this -> strona > 0) {
  136. echo('<center><a href="?strona='.($strona-1).'"><img src='rev.gif' /></a> ');
  137.  
  138. }
  139.  
  140. if(is_numeric($this -> strona) && !empty($this -> strona) && $this -> strona < $how_much) {
  141. echo('<a href="?strona='.($this-> strona+1).'"><img src='next.gif' /></a></center>');
  142.  
  143. }
  144.  
  145. else {
  146. echo('<center><a href="?strona='.($this -> strona+1).'"><img src='next.gif' /></a></center>');
  147.  
  148.  }
  149.  
  150. echo('<table align="center" style="border: 1px dotted red;"><tr><td align="center">');
  151.  
  152. for($i = 0; $i < $how_much; $i++) 
  153. echo('<a href="?strona='.$i.'">['.$i.']</a> ');
  154. echo('</td></tr></table>');
  155.  
  156. }
  157.  
  158. public function Wyswietl_form() {
  159.  
  160. echo('<html>
  161. <head><meta http-equiv="content-type" charset="utf-8" /><title>GuEsT bY MARCIO</title>
  162. <style type="text/css">
  163. a {color:#FDEDF2}
  164. body {color:#FDEDF2}
  165. </style>
  166. </head>
  167. <body bgcolor="#000000">
  168. <center><img src="gora.jpg" width="1240" height="100" alt="obrazek"/></center>
  169. <table align="center" width="75%">
  170. <form action="'.$this -> action.'" method="'.$this -> method.'">
  171. <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>
  172. <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>
  173. <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>
  174. </form></table>
  175. </body><html>'); 
  176. }
  177.  
  178.  
  179. public function Add_New_reply() {
  180.  
  181.  $this -> Wyswietl_form();
  182.  
  183.  if(!empty($this -> nick) && !empty($this -> message) && isset($_POST['dodaj'])) {
  184.  
  185.  setcookie("Spamer", "Spam", time() + 300);
  186.  
  187.  if($_COOKIE['Spamer'] != "Spam") {
  188.  
  189.  $this->addentry();
  190.  }
  191.  
  192.  else echo('<script>alert("Spadaj spamerze musisz odczekac 5min :)");</script>');
  193.  
  194.  }
  195.  }
  196.  
  197.  
  198. public function Show_All_reply() {
  199.  
  200. $this -> load_reply();
  201. $this -> pager();
  202. }
  203. };
  204.  
  205. $ksiega = new Guest($_POST['nick'], $_POST['message'], 'new_klasa.php', 'post');
  206. $ksiega -> Add_New_reply();
  207. $ksiega -> Show_All_reply();
  208.  
  209. 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>');
  210. ?>

Jednak mam takie bledy
Cytat
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'www-data'@'localhost' (using password: NO) in /var/www/new_klasa.php on line 20

Warning: mysql_query() [function.mysql-query]: Access denied for user 'www-data'@'localhost' (using password: NO) in /var/www/new_klasa.php on line 41

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /var/www/new_klasa.php on line 41
Access denied for user 'www-data'@'localhost' (using password: NO)

I nie wiem czemu przeciwz daje ze $pasy sa public i robie na nie construct'a na jednej klasie dzialalo czy ktos z was wie czemu tak sie dzieje??

P.S jesli kod jest zadlugi prosze mowic to go usune i wrzuce na jakis server

Ten post edytował marcio 10.03.2008, 00:04: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
Xniver
post 10.03.2008, 00:27:53
Post #27





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


IMHO gorzej tego zrobić nie mogłeś. Masz tutaj przykład poprawnego sterownika bazy MySQL(napisany specjalnie dla ciebie):
  1. <?php
  2. class Db
  3. {
  4. protected $link;
  5.  
  6. static protected $instance = null;
  7.  
  8. public function __construct()
  9. {
  10. require_once './config.php';
  11.  
  12. $this->link = @mysql_connect($pasy['host'], $pasy['login'], $pasy['haslo']);
  13.  
  14. if(!$this->link)
  15. {
  16. exit('Nie można połączyć z bazą danych');
  17. }
  18.  
  19. if(!mysql_select_db($pasy['baza'], $this->link))
  20. {
  21. exit('Nie można wybrać bazy danych');
  22. }
  23. }
  24.  
  25. public function __destruct()
  26. {
  27. mysql_close($this->link);
  28. }
  29.  
  30. public function fetchAssoc($query)
  31. {
  32. return mysql_fetch_assoc($query);
  33. }
  34.  
  35. public function getAll($query)
  36. {
  37. $query = $this->makeQuery($query);
  38.  
  39. $rows = array();
  40.  
  41. while($row = $this->fetchAssoc($query))
  42. {
  43. $rows[] = $row;
  44. }
  45.  
  46. return $rows;
  47. }
  48.  
  49. static public function getInstance()
  50. {
  51. if(self::$instance === null)
  52. {
  53. self::$instance = new Db;
  54. }
  55.  
  56. return self::$instance;
  57. }
  58.  
  59. public function getRow($query)
  60. {
  61. $query = $this->makeQuery($query);
  62. $query = $this->fetchAssoc($query);
  63.  
  64. if(!$query)
  65. {
  66. $query = array();
  67. }
  68.  
  69. return $query;
  70. }
  71.  
  72. public function makeQuery($query)
  73. {
  74. $query = mysql_query($query, $this->link);
  75.  
  76. if(!$query)
  77. {
  78. exit('Błąd zapytania');
  79. }
  80.  
  81. return $query;
  82. }
  83.  
  84. public function numRows($query)
  85. {
  86. return mysql_num_rows($query);
  87. }
  88. }
  89.  
  90. // ------------------
  91. // Przykłady
  92. // ------------------
  93. $db = Db::getInstance();
  94.  
  95. // Pobranie jednego wiersza z bazy danych
  96. $row = $db->getRow('SELECT * FROM `testowa_tabela`
  97. WHERE `id` = 1');
  98.  
  99. echo $row['id'];
  100.  
  101. // Pobranie wszystkich wierszy z bazy danych
  102. $rows = $db->getAll('SELECT * FROM `testowa_tabela`');
  103.  
  104. foreach($rows as $row)
  105. {
  106. echo $row['id'];
  107. }
  108.  
  109. // Wykonanie zapytania
  110. $db->makeQuery('Zapytanie do wykonania');
  111. ?>


Ten post edytował Xniver 10.03.2008, 00:30:34
Go to the top of the page
+Quote Post
marcio
post 10.03.2008, 00:37:22
Post #28





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

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


Wiem ze tego najlepiej nie napisalem ale czy mozesz powiedziec dlaczego moj kod nie dziala na 2 klasach a na jednej tak??Bylbym wdzieczny bo wiesz uczy sie na wlasnych bledach

p.S ciekawy jestem tez czy powiedzialbyc na czym polega system szablonow dla kodu html tak jak napisal mi o tym jeden z user'ow ktory uczestniczyl w tej dyskusji zeby nie dawac kodu html do klas a zrobic system szablonow czyli??Tak w kilku slowach albo jakas alternatywe

Ten post edytował marcio 10.03.2008, 00:40:01


--------------------
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
Xniver
post 10.03.2008, 00:39:15
Post #29





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


Jeśli chodzi o ten twój poprzedni kod to tam miałeś błąd w konstruktorze(zapomniałeś o global $pasy(a poza tym global niezbyt pasuje do OOP))

Re P.S: Po prostu chodzi o to ,żeby oddzielić warstwę logiki od warstwy prezentacji(zobacz sobie wzorzec MVC). Zobacz sobie jak to jest rozwiązane w jakimś frameworku(Symfony, Agavi, KohanaPHP)

Ten post edytował Xniver 10.03.2008, 00:46:55
Go to the top of the page
+Quote Post
marcio
post 10.03.2008, 00:49:42
Post #30





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

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


O lol az mi siara probowalem dac global ale do glownej klasy smile.gif a nie do podklasy wielkie dzieki zapomnialo mi sie i teraz mam nastepne pytanie a nawet 2 na jakiej zasadzie ma dzialac ten parser/system szablonow czyli zostawic ten kod html w klasie czy lepiej jak zmienie to ale jak i jeszcze jedno czy teraz kod ktory dalem wyzej zbliza sie do idei OOP czy jeszcze mi do nie daleko jesli daleko to powiedz co jeszcze bym musial zmienic bo ten twoj kod jak narazie jest dla mnie zbyt skomplikowany ....sad.gif

EDIT:
P.S teraz przeczytalem twoj p.s zaraz lukne na framework'a i mvc smile.gif

EDIT2:
Myslalem ze stosujac public dla pierwszej klasy nie bede musial dawac global dlaczego tak sie dzieje??

Ten post edytował marcio 10.03.2008, 01:01:35


--------------------
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
Xniver
post 10.03.2008, 01:08:07
Post #31





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


  1. <?php
  2. public function __construct() {
  3.  
  4. $this -> db = $db;
  5. $this -> pasy = $pasy;
  6.  
  7. }
  8. ?>


Zobacz na swój kod. Nie widzisz błędu?

  1. <?php
  2. $this -> pasy = $pasy;
  3. ?>


Skrypt musi skąd wziąć zmienną $pasy
Go to the top of the page
+Quote Post
marcio
post 10.03.2008, 01:10:33
Post #32





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

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


no tak to jak zrobic zebym nie mysial uzywac global wiesz zdaje sie do bzdeta ale jak raz ktos pokarze co i jak to sie pamieta to na zawsze tongue.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
Xniver
post 10.03.2008, 01:12:35
Post #33





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


  1. <?php
  2. public function __construct()
  3. {
  4. require_once './config.php';
  5.  
  6. $this->link = @mysql_connect($pasy['host'], $pasy['login'], $pasy['haslo']);
  7.  
  8. if(!$this->link)
  9. {
  10. exit('Nie można połączyć z bazą danych');
  11. }
  12.  
  13. if(!mysql_select_db($pasy['baza'], $this->link))
  14. {
  15. exit('Nie można wybrać bazy danych');
  16. }
  17. }
  18. ?>


Jeśli zaincludujesz config.php w metodzie/funkcji to nie musisz używać global
Go to the top of the page
+Quote Post
marcio
post 10.03.2008, 01:23:43
Post #34





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

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


AHa tak patrzac na ten twoj kod zastanawialem sie nad tym czyli juz rozumiem includujac to w construct i potem dziedziczac ot takiej klasy przy tworzeniu obiektu plik sie includuje i w podklasie a nie tylko w klasie glownej

Zrobilem tak bo w construkcie nie dzialalo i bym musial wszystko zmieniac
  1. <?php
  2. class Mysql_option {
  3.  
  4. protected $db, $pasy;
  5.  
  6. public function __construct() {
  7.  
  8. $this -> db = $db;
  9.  
  10. }
  11.  
  12.  
  13. public function db_connect() {
  14.  
  15. include('config.php');
  16. $this -> pasy = $pasy;
  17. if($this -> db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) {
  18. mysql_select_db($this->pasy['baza']);
  19. return true;
  20. }
  21.  
  22. else return false;
  23.  
  24. }
  25. //etc..
  26. ?>

Musze teraz poczytac o tym dostepie za pomoca :: o slowach kluczowych self/parent


--------------------
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 10.03.2008, 06:56:44
Post #35





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




@marcio - Pokazałem Ci, jak wyglądają klasy księgi gości zbliżone do OOP, a Ty dalej popełniasz te same błędy sad.gif. Jest tak dużo klas po to właśnie, aby było obiektowo. Każdy obiekt zajmuje się swoimi sprawami i posiada ograniczoną odpowiedzialność. Pokazałem Ci też, jak się wyszukuje obiekty (zaznacza się je w zwykłym tekście).

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 10.03.2008, 16:24:15
Post #36





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

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


@Cysiaczek staram sie jak moge ale...jakos trudno mi tak odrazu to zrozumiem mysle ze z praktyka moja OOP sie poprawi

P.S znasz moze jakies fajne kursu online albo masz moze jakies ebook'i w PDF bo nie teraz nie ma mnie w polsce i ksiazki nie kupie dopiero w wakacje wielkie dzieki bo wiesz znalazlem kupe kursow ale byly krotkie smile.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 10.03.2008, 16:27:37
Post #37





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




Nie, nie posiadam e-booków, ani adresów, bo na łamach php.pl nie uprawiamy piractwa.

Pozdrawiam i powodzenia w nauce smile.gif


--------------------
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 10.03.2008, 23:16:09
Post #38





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

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


W sumie masz racje ale dzieki smile.gif no coz poucze sie jeszcze i zobacze co z tego bedzie mam nadzieje ze wkrotce zrozumie

P.S mam jeszcze jedno male pytanie czy bylbys tak wdzieczny i molgbys mi dac jakies twoje przykladowe klasy co kiedys napisales nie zadlugie i nie skomplikowane sciaglem pager'a Nospor'a ale jest zatrudnu i zadlugi a inne kody w sieci idem moze masz cos ciekawego??

Napisalem to na nowo na 3 klasach + system szablonow jak zwykle nie jest to OOP ale zawsze cos dziala dzialac jednak moze ktos pokazac co by zmienil

Mam jeszcze jedno pytanie probowalem to zrobic na interfejsach zeby nie robic tych wszystkich klas i nie dawac extends i robil np tak
Plik interface.php
  1. <?php
  2. interface Db {
  3.  
  4. public function db_connect();
  5. public funcion db_close();
  6. public function new_query();
  7. //etc wszystkie metody potrzebne do sql
  8. }
  9.  
  10. interface Html_code {
  11.  
  12. public function html();
  13. public function button();
  14. public function text_input();
  15. //etc wszystkie metody do szablonu html
  16. }
  17. ?>

Potem plik interface.php includowalem do new_klasa.php(glowna klasa) i robilem cos takiego
  1. <?php
  2. class Guest implements Db, Html_code {
  3. //tu wszystkie metodu pola etc...
  4. }
  5. ?>

I wywalalo jakis blad a nie wiem dlaczego tzn ze za db_connect prawidlo jest sie odwolywac Db::db_connect a nie Guest::db_connect i tak samo z innymi metodami wiec co zle robilem??

Czy piszac to na interfejsach kod bylby krotszy skoro nie musial bym pisac w kazdel klasie metody lecz tylko w klasie w ktorej je potrzebowalem

P.S i jeszcze jedno to co ja robie to jest dziedziczenie
Db
|
Html_code
|
Guest

Jednak dla kadzej klasu musialem pisac wlasne metody jednak stosujac interface wychodzi na wielodziedziczenie
czyli Klasa Guest dziedziczy od Db i Html_code naraz nawet ze wyczytalem ze nie jest to jednak takie wielodziedziczenie jak w C++/Java ale czy za pomoca interface nie bylo by mniej kodu i czy idzie tak zrobic bo wtedy pisze tylko metody gdzie mi sa potrzebne

Tu jest link klasy:http://rafb.net/p/IOORnq87.html


--------------------
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
Xniver
post 11.03.2008, 10:35:04
Post #39





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


Czemu cały czas dziedziczysz/implementujesz interfejs klasę/y Db? Nie możesz po prostu użyć jej jako zewnętrznej klasy?

Ten post edytował Xniver 11.03.2008, 10:41:24
Go to the top of the page
+Quote Post
marcio
post 11.03.2008, 15:07:57
Post #40





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

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


Cytat
Nie możesz po prostu użyć jej jako zewnętrznej klasy?

Czyli bo nie bardzo rozumiem dac do osobnego pliku i co??

P.S kolge mi wytlumaczyl po co sa interfejsy sluza do pracy na obiektach nie na polach jednak nie wiem czy dobrze zrozumialem jak zle to napewno nie jego wina smile.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
Xniver
post 11.03.2008, 15:24:24
Post #41





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


Nie chodziło o to:
  1. <?php
  2. class Db
  3. {
  4. // Tutaj baza(z getInstance() itp.)
  5. }
  6.  
  7. class GuestBook
  8. {
  9. public function jakasFunkcja()
  10. {
  11. $query = Db::getInstance()->query('SELECT ...');
  12.  
  13. }
  14. ?>


Ten post edytował Xniver 11.03.2008, 15:26:16
Go to the top of the page
+Quote Post
marcio
post 11.03.2008, 16:35:28
Post #42





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

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


Cytat(Xniver @ 11.03.2008, 15:24:24 ) *
Nie chodziło o to:
  1. <?php
  2. class Db
  3. {
  4. // Tutaj baza(z getInstance() itp.)
  5. }
  6.  
  7. class GuestBook
  8. {
  9. public function jakasFunkcja()
  10. {
  11. $query = Db::getInstance()->query('SELECT ...');
  12.  
  13. }
  14. ?>

Czyli wywolujac A::jaka_fuinckja(); daje to to ze z zwnetrza innej klasy mozna wywolac funckje z innej klasy nawet jesli sie nie dziedziczy jej metod tongue.gif dzieki ogolnie wyglada to bardziej profesjonalnie smile.gif to kiedy powinno sie uzywac extends a kiedy tego "::" questionmark.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
carbolymer
post 11.03.2008, 21:56:24
Post #43





Grupa: Zarejestrowani
Postów: 102
Pomógł: 12
Dołączył: 27.01.2007
Skąd: north              Poziom: 158                     Tytuł: Miszcz

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


Widze tu braki w podstawach OOP. Extends (jak sama nazwa wskazuje sic!) używasz jeżeli chcesz rozszerzyć możliwości klasy (np. sterownik bazy żeby mógł używać innego typu bazy). :: jest to operator dostępu. Używasz go przy dostępie do statycznych metod klasy, dosyć często w singletonach (tak jak tutaj). Dziedziczenie nie jest na wszystko rozwiązaniem. Czasem niepożądana jest obecność innych metod w obiekcie (np. obsługa formatowania tekstu w klasie od strumieniowania audio) dlatego nie można wszystkiego dziedziczyć. Inną sprawą jest wydajność. Gdybyśmy mieli 1001 klas a każda by dziedziczyła po klasie DB, to w każdym obiekcie jednej z tych 1001 klas byłby obiekt klasy DB (no, niedokładnie, ale tak można teoretyzować). Każdy obiekt DB tworzył by połączenie (no, można dać statyczne połączenie, ale i tak spora część obiektu typu DB jest kopiowana!), oddzielne cachowanie i kilka innych pierdół co zaowocuje w wysokim użyciu zasobów i zarżnięciu serwera na amen. :]


--------------------
Blog | plugin system by carbolymer
Residence: #php.pl @ IRCNet
"Pralki powstały po to, aby kobiety też mogły programować"
Go to the top of the page
+Quote Post
marcio
post 11.03.2008, 22:53:38
Post #44





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

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


Dzieki czyli operator :: mozna powiedziec ze zastepuje w pewnym sensie extends jednak dobrze ze dziedzicze klase do formatowania tekstu z ta Guest??Rozjasniles mi idee jednak musze sie nauczyc podstaw czytam i czytam ale wycztac nie potrafie smile.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
Xniver
post 11.03.2008, 23:00:25
Post #45





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


Cytat
Dzieki czyli operator :: mozna powiedziec ze zastepuje w pewnym sensie extends

Nieeee, on służy do wywołania statycznych funkcji klasy(poza tym ty naprawdę się uparłeś na to extends tongue.gif)

Ten post edytował Xniver 11.03.2008, 23:01:00
Go to the top of the page
+Quote Post
marcio
post 11.03.2008, 23:13:27
Post #46





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

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


No troche sie uparlem nie wiem czemu tongue.gif jakos tak w ksiazce tak jest to ty bys zrobil wszystko za pomoca ::questionmark.gif

Mam jeszcze jedno pytanie pozmienialem wszystko i zamiast dawac jako matke klas(czy jakos tam) Mysql_option dalem te :: w metodach w innych klasach gdzie je wywoluje ale stalo sie cos dziwnego przynajmniej dla mnie smile.gif
A praktycznie chodzi o to ze w funckji do wysylania zapytania sql musialem dac operator :: czyli mam tak
  1. <?php
  2. //klasa mysql_option
  3.  
  4. public function new_query($query) {
  5.  
  6. Mysql_option::db_connect();
  7. $this -> new_query = $query;
  8. if($result = mysql_query($this -> new_query))
  9. return $result;
  10.  
  11. else return die(mysql_error());
  12. $this -> db_close();
  13. }
  14. ?>

Jednak jak zamiast Mysql_option::db_connect dam $this -> db_connect(); wywala takiego error'a
Cytat
Fatal error: Call to undefined method Guest::db_connect() in /var/www/new_klasa.php on line 39

Gdzie linia 39 to ta co podalem wyzej a dlaczego nie daje tego error'a prz $this -> db_close();??
Myslalem ze ten operator sluzy tylko do wywolywania metod w innej klasie niz zostaly napisane z nie tez w danej klais eczyli mam taki kod teraz:http://rafb.net/p/pWJLp659.html
Moze ktyos wytlumaczyc dlaczego tak sie dzieje

P.S znacie jakies fajne kursu online??Chyba sobie w wakacje kupie ksiazki do 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
Xniver
post 11.03.2008, 23:20:39
Post #47





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


Bo $this wywołuje funkcje znajdujące się w aktualnej klasie. A Mysql_option::db_connect() wywołuje statyczną funkcje db_connect klasy Mysql_option
Go to the top of the page
+Quote Post
marcio
post 11.03.2008, 23:32:43
Post #48





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

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


No tak ale ta funckja new_query znajduje sie w klasie Mysql_option i db_connect w niej zeby nie wywolywac 3 metod naraz w innej klasie wiec czemu tak myslalem ze mam uzywac tylko :: w innej klaise bo do $this -> db_close() sie nie pluje interpreter a w tym samym miejscy uzywam smile.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
specialplan
post 12.03.2008, 12:00:28
Post #49





Grupa: Zarejestrowani
Postów: 206
Pomógł: 21
Dołączył: 1.09.2006
Skąd: Edinburgh

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


marcio, a moze zacznij od:

http://pl.wikibooks.org/wiki/PHP/Wst%C4%99...nia_obiektowego

http://webcity.pl/webcity/programowanie_ob...e_w_php_5_cz__1
http://webcity.pl/webcity/programowanie_ob...e_w_php_5_cz__2
http://webcity.pl/webcity/programowanie_ob...e_w_php_5_cz__3

No i oczywiscie:

http://www.google.co.uk/search?source=ig&a...earch&meta=
Go to the top of the page
+Quote Post
Noctrum
post 14.03.2008, 18:56:53
Post #50





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 12.03.2008

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


Cysiaczek moge prosic Ciebie o wyjasnienie tej linijki z twojego kodu:

  1. <?php
  2. $this->collection->loadFromArray(& $result->fetchAllRows());
  3. ?>


przerabiam kod ktory podales jako przyklad i wyskakuje mi taki blad:

Fatal error: Can't use method return value in write context in ...

pozdrawiam


Ten post edytował Noctrum 14.03.2008, 19:01:03
Go to the top of the page
+Quote Post
Cysiaczek
post 14.03.2008, 19:26:49
Post #51





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




Hm, to jest pseudokod, rozbudowany, ale nadal pseudokod. Ja tego kodu nigdy nawet nie uruchomiłem - pisałem z góry na dół, więc błędy będą na pewno. Nie wiem, dlaczego utrzymujesz taki error, bo nie wiem, co zwraca twoja metoda fetchAllRows()
Kiedy to pisałem, zakładałem, że będzie to tablica z rekordami z bazy danych, które następnie zostaną przez metodę loadFromArray() zamienione na obiekty GuestBookEntry. Usuń referencję i zobacz, czy zadziała :]

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 16.03.2008, 17:11:29
Post #52





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

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


Sorki ze nie odpowiadalem ale nie bylo mnie...

Dzieki za kursu ale czytalem je juz...


--------------------
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
tomahawk
post 16.03.2008, 18:23:25
Post #53





Grupa: Zarejestrowani
Postów: 74
Pomógł: 1
Dołączył: 5.02.2007

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


A powiedzcie mi jedną rzecz...

Czemu w OOP używa się nazwy typu getLastCostamFromCostam

Chodzi o te duże litery... no jak w javie...


P.S.
Jak ja nienawidzę javy!!!!
Go to the top of the page
+Quote Post
marcio
post 16.03.2008, 18:27:29
Post #54





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

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


Chyba dla przejzystosci...


--------------------
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
tomahawk
post 16.03.2008, 18:29:29
Post #55





Grupa: Zarejestrowani
Postów: 74
Pomógł: 1
Dołączył: 5.02.2007

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


Ale czemu akurat w ten sposób?

Możne np. dać twarde spacje i jest moim zdaniem bardziej przejrzyste.
Go to the top of the page
+Quote Post
itsme
post 16.03.2008, 18:48:02
Post #56





Grupa: Zarząd
Postów: 1 512
Pomógł: 2
Dołączył: 22.04.2002
Skąd: Koszalin




temat ma duzo wspolnego z OOP ale nie na poziomie pozwalajacym pozostawienie go w tym dziale.

Przenosze


--------------------
brak sygnaturki rowniez jest sygnaturką
Go to the top of the page
+Quote Post
Sedziwoj
post 16.03.2008, 18:48:04
Post #57





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Cytat(tomahawk @ 16.03.2008, 18:29:29 ) *
Ale czemu akurat w ten sposób?

Możne np. dać twarde spacje i jest moim zdaniem bardziej przejrzyste.


To używaj innych języków tam gdzie to stosuję, ale nie jest bardziej przejrzyste, do tego dłuższe.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
tomahawk
post 17.03.2008, 17:21:58
Post #58





Grupa: Zarejestrowani
Postów: 74
Pomógł: 1
Dołączył: 5.02.2007

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


To dlaczego w php jedne funkcję są s twardymi spacjami jak np. is_array(), str_replace itd... a inne bez, np. getType()...? Czyż to nie dziwne?
Go to the top of the page
+Quote Post
l0ud
post 17.03.2008, 20:44:27
Post #59





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


Cytat
To dlaczego w php jedne funkcję są s twardymi spacjami jak np. is_array(), str_replace itd... a inne bez, np. getType()...? Czyż to nie dziwne?


Cóż... niekonsekwentne przestrzeganie nazw funkcji to jedna z wad php, a już jest raczej za późno żeby to poprawić...


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
Sedziwoj
post 17.03.2008, 23:12:51
Post #60





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Cytat(l0ud @ 17.03.2008, 20:44:27 ) *
Cóż... niekonsekwentne przestrzeganie nazw funkcji to jedna z wad php, a już jest raczej za późno żeby to poprawić...


Pierwotnie PHP czerpało inspirację w nazewnictwie i działaniu z C (w którym jest napisane) ale obiektowość jest z Java stąd ta zmiana sposobu nazewnictwa.
Co nie zmienia faktu, że nie jest konsekwentne.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
shine
post 20.03.2008, 12:22:50
Post #61





Grupa: Zarejestrowani
Postów: 78
Pomógł: 5
Dołączył: 15.04.2006

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


Cytat(tomahawk @ 16.03.2008, 18:23:25 ) *
A powiedzcie mi jedną rzecz...

Czemu w OOP używa się nazwy typu getLastCostamFromCostam

Chodzi o te duże litery... no jak w javie...
P.S.
Jak ja nienawidzę javy!!!!


Notacja wegierska...

Poczytaj sobie
Go to the top of the page
+Quote Post
mosqi83
post 22.03.2008, 22:44:51
Post #62





Grupa: Zarejestrowani
Postów: 28
Pomógł: 2
Dołączył: 20.02.2007
Skąd: Opole

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


Cytat(tomahawk @ 16.03.2008, 18:23:25 ) *
A powiedzcie mi jedną rzecz...

Czemu w OOP używa się nazwy typu getLastCostamFromCostam

Chodzi o te duże litery... no jak w javie...
P.S.
Jak ja nienawidzę javy!!!!


Notacja "wielbłądzia".

CamelCase @ Wikipedia.
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: 14.08.2025 - 13:44