Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasa news - czy to można nazwać OOP?
adriano321
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 1
Dołączył: 24.01.2007

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


Jestem dopiero co zaczynającym "programistą" (haha) PHP. Programowanie proceduralne nie sprawia mi już większych kłopotów więc chcę wkroczyć na wyższy poziom. Niestety same podstawy tj. teoria nie wystarczy, żeby napisać coś samemu czyt. dobrze napisać. Więc tu się zwracam z prośbą do Was: Czy to coś poniżej ma jakiś związek z OOP? I czy z własnych doświadczeń możecie coś zaproponować, jakieś rozwiązania dalsze?

Klasa ObsługaNewsa z założenia ma być dostępna tylko z poziomu panelu administracyjnego.

Kolejne pytanie:
Jak rozwiązać problem wyświetlania kilku newsów na jednej stronie? Utworzyć kilka egzemplarzy klasy News? Tu zastanawiam się jak zrobić to, aby wykonać tylko jedno zapytanie do bazy danych?

Czy można się w jakiś sposób pozbyć dodawania $db w parametrach metod??

  1. <?php
  2. class News {
  3.  
  4. public $id;
  5. public $tytul;
  6. public $tresc;
  7. public $autor;
  8. public $data;
  9. public $kategoria;
  10.  
  11. function __construct() 
  12. {
  13. }
  14.  
  15. }
  16.  
  17. class ObslugaNews extends News { 
  18.  
  19. public function dodajNewsa ($db) 
  20. {
  21. $sql = "INSERT INTO `news` (`id` ,`title` ,`text` ,`date` ,`edit_date` ,`id_author` ,`id_kategory`) VALUES ('','$this->tytul','$this->tresc','$this->data','','$this->autor','$this->kategoria')";
  22.  
  23. if (@!$db->query($sql)) echo " z tego!";
  24. }
  25.  
  26. public function edytujNewsa ($id,$db) 
  27. {
  28. $sql="UPDATE `news` SET `title`=$this->tytul ,`text`=$this->tresc ,`edit_date`='aktualna_data' ,`id_kategory`=$this->kategoria WHERE `news`.`id`=$id LIMIT 1";
  29.  
  30. if (@!$db->query($sql)) echo " z tego!";
  31. }
  32.  
  33. public function pobierzNewsa ($id,$db) 
  34. {
  35. $sql="SELECT `id` ,`title` ,`text` ,`date` ,`edit_date` ,`id_author` ,`id_kategor
    y` FROM `news` WHERE id='$id' LIMIT 1"
    ;
  36.  
  37. if (@!$wynik=$db->query($sql)) echo " z tego!";
  38. $wynik = $wynik->fetch_array();
  39.  
  40. return $wynik;
  41. }
  42.  
  43. public function ustawNewsa ($tytul,$tresc,$kategoria) 
  44. {
  45. $this->tytul = strip_tags(ltrim(addslashes($tytul)));
  46. $this->tresc = strip_tags(addslashes(ltrim($tresc)));
  47. $this->kategoria = strip_tags(ltrim(addslashes($kategoria)));
  48. }
  49. }
  50. ?>


Adriano.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Cysiaczek
post
Post #2





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




Nie zniechęcaj się, ale to jest kod strukturalny ujęty w klasy (pseudo oop). Nie jest to nic złego, ale aby nie psuć pojęcia OOP, to nazywajmy to poop (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

Błędy, które od razu rzucają się w oczy.

1. Nazewnictwo klas i metod. Pisz angielskie wersje
2. W tym wypadku News jest jedną tabelą, więc dobrze, aby był tak traktowany (to sie nazywa mapowanie relacyjno obiektowe - tu w podstawowej wersji na jednej tabeli). Częśc metod, jak np. obsługaNews:: pobierzNewsa($id) może być w samej klasie News. Ni eoznacz to bynajmniej, że ta klasa obsługaNews jest zbędna.

  1. <?php
  2. class News
  3. {
  4. public $id;
  5. public $tytul;
  6. public $tresc;
  7. public $autor;
  8. public $data;
  9. public $kategoria;
  10.  
  11. function __construct($data)
  12. {
  13. // Wykorzystamy to, że php ma dynamiczne typowanie zmiennych
  14. if(is_integer($data))
  15. {
  16. $sql="SELECT * FROM news WHERE id='$id' LIMIT 1";
  17. $result=$db->query($sql);
  18. $current=$result->fetchRowAsArray();
  19. }
  20. elseif(is_array($data))
  21. {
  22. $current=& $data;
  23. }
  24.  
  25. //Tu już Twoja wyorraźnia niech zadziała, bo da się to zrobić ładniej, ale ja nie 
    chce zaciemniać kodu
  26. $this->id=$current['id'];
  27. //itd.
  28. }
  29.  
  30. public function save()
  31. {
  32. // zapisa obiektu do bazy danych
  33. }
  34.  
  35. }
  36.  
  37. class NewsBase
  38. {
  39. private $collection;
  40.  
  41. public function __construct()
  42. {
  43. $this->collection=new NewsCollection(); // Obiekt kolekcji
  44. }
  45.  
  46. public function loadSomeNews($howMany, $order)
  47. {
  48. $stack=array();
  49. $sql="SELECT * FROM news WHERE ORDER BY $order LIMIT $howMany";
  50. $result=$db->query($sql);
  51. foreach($result->fetch_array() as $row)
  52. {
  53. $obj=new News($row);
  54. $stack[]=$obj;
  55. $this->collection->add($obj);
  56. }
  57. return $stack;
  58. }
  59.  
  60. public function findById($id)
  61. {
  62. if($this->collection->has($id))
  63. {
  64. return $this->collection->get($id);
  65. }
  66. else
  67. {
  68. $obj=new News($id);
  69. $this->collection->add($obj);
  70. return $obj;
  71. }
  72. }
  73.  
  74. function saveCollection()
  75. {
  76. foreach($this->collection as $obj)
  77. {
  78. $obj->save();
  79. }
  80. }
  81. }
  82. ?>


Pisane z palca, bez sprawdzenia, traktuj to jako pseudokod (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam.

p.s To nie jest jedyna metoda, anie też nie zawsze najlepsze. Jest za to szybka w implementacji i daje dość duże pole manewru.
Go to the top of the page
+Quote Post

Posty w temacie
- adriano321   Klasa news - czy to można nazwać OOP?   11.02.2008, 18:32:10
- - Cysiaczek   Nie zniechęcaj się, ale to jest kod strukturalny u...   11.02.2008, 20:43:31
- - Whisller   @cysiaczek Ja osobiscie nie wstawiał bym pobierani...   12.02.2008, 14:10:14
- - Cysiaczek   Twoje jest bardzie oop ;] Tylkp, że mi przyświecał...   12.02.2008, 15:45:18
- - adriano321   ooo właśnie o to mi chodziło. Dzięki wielkie za pr...   12.02.2008, 16:47:31
- - Whisller   @adriano321 Możesz przekazać handler po...   12.02.2008, 17:43:46
- - adriano321   No to teraz zaprezentuję całą klas...   14.02.2008, 18:24:19
- - Whisller   @adriano321 1. Nie rób echo w metodzie klasy Bo d...   14.02.2008, 21:31:34
- - revyag   A nie byłoby czytelniej zamiast tych wszystki setC...   15.02.2008, 09:50:24
- - adriano321   Cytat1. Nie rób echo w metodzie klasy smile.gif Bo...   15.02.2008, 14:33:05
- - Black-Berry   Tak czytam i widzę, że siedzimy w tym samym temaci...   16.02.2008, 01:24:31
- - Cysiaczek   Można też tak, co pozwala na zachowanie interfejsu...   16.02.2008, 08:30:05
- - adriano321   Czy to jest dobrze? Albo raczej czy to jest zgodne...   16.02.2008, 12:37:55
- - Whisller   @revyag Jasne że można ale tylko wtedy gdy masz pe...   17.02.2008, 23:11:52
- - revyag   @Whisller ale ja nie podałem __set tylko set__ To...   18.02.2008, 12:28:43
- - Cysiaczek   Może i odrobinę wolniejsze, ale jak masz mieć 100 ...   18.02.2008, 17:09:06
- - Sedziwoj   Jak dla mnie te wszystkie magiczne metody robią bu...   20.02.2008, 10:56:20


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: 24.12.2025 - 15:45