Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][OOP] Czy to tak może być?, pierwsze zderzenie z OOP ;)
terabit
post
Post #1





Grupa: Zarejestrowani
Postów: 170
Pomógł: 4
Dołączył: 11.08.2006

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


Witam,
właśnie zacząłem próbować pisać cos obiektowo w php...

na razie wyszło mi coś takiego:


klasa do łączenia z bazą danych
  1. <?php
  2. error_reporting( E_ALL ); 
  3.  
  4. class polacz_sql {
  5.  
  6. private $sql;
  7.  
  8. public function __construct() {
  9.  
  10. $this -> db_host = '127.0.0.1'; // Adres serwera
  11. $this -> db_name = 'oop_cms'; // Nazwa bazy danych
  12. $this -> db_user = 'root'; // Nazwa uzytkownika
  13. $this -> db_password = 'root'; // Haslo
  14.  
  15. $this -> sql = mysql_connect($this -> db_host, $this -> db_user, $this -> db_password);
  16. mysql_select_db($this -> db_name);
  17.  
  18. if (!is_resource($this -> sql)) {
  19. die('Brak polaczenia z baza danych.' . mysql_error());
  20. }
  21.  
  22. }
  23.  
  24. public function __destruct() {
  25.  
  26. if(!is_resource($this -> sql)) {
  27. mysql_close($this -> sql);
  28. }
  29.  
  30. }
  31.  
  32. }
  33. ?>


klasa do zarządzania podstronami:
  1. <?php
  2. error_reporting( E_ALL ); 
  3.  
  4. require_once 'class.polaczenie_sql.php';
  5.  
  6. class podstrona extends polacz_sql {
  7.  
  8. public function pobierz_podstrone($id) {
  9.  
  10. $this -> res = mysql_query("SELECT * FROM podstrony WHERE id = '$id' LIMIT 1");
  11. return $this -> res;
  12.  
  13. }
  14.  
  15. public function edytuj_podstrone($id, $menu, $tresc) {
  16.  
  17. mysql_query("UPDATE `oop_cms`.`podstrony` SET `menu` = '$menu', `tresc` = '$tresc' WHERE `id` = $id LIMIT 1");
  18.  
  19. }
  20.  
  21. public function lista_podstron() {
  22.  
  23. $this -> res = mysql_query("SELECT id, menu FROM podstrony");
  24. return $this -> res;
  25.  
  26. }
  27.  
  28. public function usun_podstrone($id) {
  29.  
  30. mysql_query("DELETE FROM `podstrony` WHERE `id` = $id LIMIT 1");
  31.  
  32. }
  33.  
  34. public function dodaj_podstrone($nazwa) {
  35.  
  36. INSERT INTO `oop_cms`.`podstrony` (
  37. `id` ,
  38. `menu` ,
  39. `tresc`
  40. )
  41. VALUES (
  42. NULL , '$nazwa', ''
  43. )
  44. ");
  45.  
  46. }
  47.  
  48. }
  49. ?>


oraz zastosowanie:
  1. <?php
  2. error_reporting( E_ALL ); 
  3. include("class.podstrona.php");
  4. $objPodstrona = new podstrona();
  5. ?>
  6.  
  7. <h2>Edycja podstron</h2>
  8.  
  9. <?php
  10.  
  11. if(isset($_GET['zmien'])) {
  12. $objPodstrona -> edytuj_podstrone($_GET['zmien'], $_POST['menu'], $_POST['tresc']);
  13. }
  14.  
  15. if(isset($_GET['usun'])) {
  16. $objPodstrona -> usun_podstrone($_GET['usun']);
  17. }
  18.  
  19. if(isset($_GET['dodaj'])) {
  20. $objPodstrona -> dodaj_podstrone($_POST['menu']);
  21. }
  22.  
  23. if(isset($_GET['edycja'])) {
  24.  
  25. $res = $objPodstrona -> pobierz_podstrone($_GET['edycja']);
  26. while ($rekord = mysql_fetch_array($res)) {
  27. echo '
  28. Edycja podstrony:
  29. <form method="post" action="?zmien='.$rekord['id'].'">
  30. <input type="text" name="menu" value="'.$rekord['menu'].'" /><br />
  31. <textarea name="tresc">'.$rekord['tresc'].'</textarea><br />
  32. <input type="submit" value="Edytuj" />
  33. </form>
  34. ';
  35. }
  36.  
  37. }
  38.  
  39. ?>
  40.  
  41. <hr />
  42. Lista podstron:<br /><br />
  43.  
  44. <?php
  45.  
  46. $res = $objPodstrona -> lista_podstron();
  47.  
  48. while ($rekord = mysql_fetch_array($res)) {
  49. echo $rekord['menu'].' <a href="?edycja='.$rekord['id'].'">edycja</a> | <a href="?usun='.$rekord['id'].'">usun</a> <br />';
  50. }
  51.  
  52. ?>
  53.  
  54. <br /><hr /><br />
  55.  
  56. Dodaj podstrone:
  57.  
  58. <form method="post" action="?dodaj">
  59. <input type="text" name="menu" /><br />
  60. <input type="submit" value="Dodaj" />
  61. </form>


nie pisałem narazie nic wiecej, sprawdzania poprawnosci wpisanych danych itp.
czytałem kilka tematów na tym forum, starałem się nie popełniać błędów innych... wątpie żeby mi się to udało.. ale

mam kilka pytań (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
1. co jest źle? co napisalibyście inaczej?
2. jak to poprawnie napisać stosując szablony MVC?
z tego co wiem to strona widoku może mieć PHP ale tylko podstawowa skladnia typu for, if, while...
tylko jak to rozbić na kontroler i model? czy przy tak prostych klasach jest to możliwe?
3. czy dobrze wykombinowałem z łączenie z bazą danych? czy może ta klasa być dziedziczona przez inne?
4. czy na stronie widoku mogę używać normalnych zmiennych typu $jakas_zmienna ? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

zaraz pewnie ktoś napisze ze to co zrobiłem to jeszcze nie prawdziwe OOP, ale to dopiero mój początek z OOP więc proszę o wyrozumiałość oraz wskazówki co mógłbym jeszcze tutaj zastosować (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował terabit 9.07.2008, 18:27:43
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wlamywacz
post
Post #2





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

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


Cytat(Sedziwoj @ 10.07.2008, 09:51:30 ) *
Dlaczego nie return, bo PHP pozwala zignorować to, więc ktoś może nawet nie wiedzieć, że wystąpił błąd a to się okaże dopiero dalej.

Mógłbyś to rozwinąć ? Oczywiście sam stosuje:
  1. <?
  2. function __autoload($class) {
  3. require_once './class/' . $class . '.class.php';
  4. }
  5.  
  6. try {
  7.  
  8. $ini_array = parse_ini_file("config.ini", true);
  9.  
  10. $db = new db;
  11. $db->setParam('user', $ini_array['mysql']['user']);
  12. $db->setParam('pass', $ini_array['mysql']['pass']);
  13. $db->setParam('name', $ini_array['mysql']['name']);
  14. $db->setParam('host', $ini_array['mysql']['host']);
  15. $db->connect();
  16.  
  17. $action = new action;
  18. $action->setParam('defClass', $ini_array['action']['defClass']);
  19. $action->setParam('startClass', $ini_array['action']['startClass']);
  20. $action->setParam('explode', $ini_array['action']['explode']);
  21. $action->setParam('exceptions', $ini_array['action']['exceptions']);
  22. $action->action();
  23.  
  24. } catch (Exception $e) {
  25. echo 'Wystąpił błąd systemu xxxxx.pl: <b>', $e->getMessage(), "</b>\n";
  26. }
  27. ?>


Ten post edytował wlamywacz 10.07.2008, 11:17:34
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #3





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

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


Cytat(wlamywacz @ 10.07.2008, 12:16:53 ) *
Mógłbyś to rozwinąć ?


Już pominę fakt return w __construct(), ogólnie masz kod:
  1. <?php
  2. class Something {
  3.  
  4. /**
  5.  * If returns -1 means error, other case returns null
  6.  *
  7.  * @return integer
  8.  */
  9. public function doIt(){
  10. return -1; 
  11. }
  12.  
  13. }
  14. $s = new Something();
  15. $s->doIt();
  16. //And go ahead
  17. ?>

Czyli ktoś nie sprawdza czy wystąpił błąd, i nie wie że wystąpił. Takie przypadki można często spotkać jak ludzie korzystają z wbudowanych funkcji, gdzie często informacja o błędzie jest właśnie w tym co zwraca. Najczęściej nie ma problemów, więc nawet nie wiedzą, że powinni to sprawdzać, a jak wystąpią to nie wiadomo co się dzieje. "Przecież wszystko działa"

EDIT poprawa konwencji, nie wiem czemu napisałem nazwę klasy z małej litery.

Ten post edytował Sedziwoj 10.07.2008, 11:31:57
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 22:42