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
adriano321
post
Post #2





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

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


No to teraz zaprezentuję całą klasę news(na podstawie klasy Whisllera, dzięki chłopaki), może komuś się w przyszłości przyda (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) . Jakby ktoś miał jakieś zastrzeżenia to proszę o przedstawienie ich, będą one na pewno bardzo pomocne w dalszej pracy.

  1. <?php
  2. class News
  3. {
  4. private $id = null;
  5. private $title = null;
  6. private $text = null;
  7. private $date = null;
  8. private $editDate = null;
  9. private $idAuthor = null;
  10. private $idKategory = null;
  11.  
  12.  
  13.  
  14. public function __construct(array $args)
  15. {
  16. isset($args['id'])  ? $this->setId($args['id'])  : '';
  17. isset($args['title'])$this->setTitle($args['title'])  : '';
  18. isset($args['text'])  ? $this->setText($args['text'])  : '';
  19. isset($args['date'])  ? $this->setDate($args['date'])  : '';
  20. isset($args['editDate'])  ? $this->setEditDate($args['editDate'])  : '';
  21. isset($args['idAuthor'])  ? $this->setIdAuthor($args['idAuthor'])  : '';
  22. isset($args['idKategory']) ? $this->setIdKategory($args['idKategory']) : '';
  23. }
  24.  
  25. public function setId($id)
  26. {
  27. $this->id = (int)$id;
  28. }
  29.  
  30. public function setTitle($title)
  31. {
  32. $this->title = $title;
  33. }
  34.  
  35.  
  36. public function setText($text)
  37. {
  38. $this->text = $text;
  39. }
  40.  
  41. public function setDate($date)
  42. {
  43. $this->date = $date;
  44. }
  45.  
  46. public function setEditDate($editDate)
  47. {
  48. $this->editDate = $editDate;
  49. }
  50.  
  51. public function setIdAuthor($idAuthor)
  52. {
  53. $this->idAuthor = (int)$idAuthor;
  54. }
  55.  
  56. public function setIdKategory($idKategory)
  57. {
  58. $this->idKategory = $idKategory;
  59. }
  60.  
  61. public function getId() 
  62. {
  63. return $this->id;
  64. }
  65.  
  66. public function getTitle() 
  67. {
  68. return $this->title;
  69. }
  70.  
  71. public function getText() 
  72. {
  73. return $this->text;
  74. }
  75.  
  76. public function getDate() 
  77. {
  78. return $this->date;
  79. }
  80.  
  81. public function getEditDate() 
  82. {
  83. return $this->editDate;
  84. }
  85.  
  86. public function getIdAuthor() 
  87. {
  88. return $this->idAuthor;
  89. }
  90.  
  91. public function getIdKategory() 
  92. {
  93. return $this->idKategory;
  94. }
  95.  
  96. }
  97.  
  98.  
  99. class NewsManager
  100. {
  101. public $db;
  102.  
  103. function __construct($db) {
  104. $this->db=$db;
  105. } 
  106.  
  107. public function save(News $news)
  108. {
  109. if ($this->getId($news->getId())) {
  110. $this->edit($news);
  111. } else {
  112. $this->add($news);
  113. }
  114. }
  115.  
  116. private function getId($id) 
  117. {
  118. $sql="SELECT id FROM news WHERE id='$id'";
  119. $result = $this->db->query($sql);
  120.  
  121. if ($result->num_rows == 1) {
  122. return true;
  123. } else {
  124. return false;
  125. }
  126. }
  127.  
  128. private function edit(News $news)
  129. {
  130. $sql="UPDATE `news` SET `title`='".$news->getTitle()."' ,`text`='".$news->getText()."' ,`editDate`='".$news->getEditDate()."' ,`idKategory`='".$news->getIdKategory()."' WHERE `news`.`id`='".$news->getId()."' LIMIT 1";
  131.  
  132. if ($this->db->query($sql)) echo "tak";
  133. else echo $this->db->error;
  134. }
  135.  
  136. private function add(News $news)
  137. {
  138. $sql = "INSERT INTO `news` VALUES ('','".$news->getTitle()."','".$news->getText()."','".$news->getDate()."','','".$news->getIdAuthor()."','".$news->getIDKategory()."')";
  139.  
  140. if ($this->db->query($sql)) echo "tak";
  141. else echo $this->db->error;
  142. }
  143.  
  144. private function delete($id)
  145. {
  146. $sql="DELETE FROM `news` WHERE `news`.`id`=$id LIMIT 1";
  147. if ($this->db->query($sql)) echo "tak";
  148. else echo $this->db->error;
  149. }
  150.  
  151. public function getOne($id)
  152. {
  153.  
  154.  
  155. $sql="SELECT * FROM `news` WHERE `id`=$id LIMIT 1";
  156.  
  157. $result = $this->db->query($sql);
  158. $result = $result->fetch_array();
  159.  
  160. $args = array();
  161.  
  162. $args['id'] =  $result['id'];
  163. $args['title']  =  $result['title'];
  164. $args['text'] =  $result['text'];
  165. $args['date'] =  $result['date'];
  166.  $args['editDate'] =  $result['editDate'];
  167. $args['idAuthor'] =  $result['idAuthor'];
  168. $args['idKategory']=  $result['idKategory'];
  169.  
  170. return new News($args);
  171. }
  172.  
  173. public function getMany($howMany,$startFrom)
  174. {
  175. $sql="SELECT * FROM `news` WHERE `news`.`id`=$id ORDER BY id DESC LIMIT $startFro
    m, $howMany"
    ;
  176.  
  177. $result = $this->db->query($sql);
  178.  
  179. $news = array();
  180.  
  181. while( $temp = $result->fetch_array() ) {
  182. $args = array();
  183.  
  184. $args['id'] =  $temp['id'];
  185. $args['title']  =  $temp['title'];
  186. $args['text'] =  $temp['text'];
  187. $args['date'] =  $temp['date'];
  188. $args['editDate'] =  $temp['editDate'];
  189. $args['idAuthor'] =  $temp['idAuthor'];
  190. $args['idKategory']=  $temp['idKategory'];
  191.  
  192.  
  193. $news[]=new News($args);
  194.  
  195. }
  196. return $news;
  197. }
  198.  
  199. public function getNewsList($sort) // ASC or DESC
  200. {
  201. $sql = "SELECT `id`,`title` FROM `news` ORDER BY id ".$sort;
  202. $result = $this->db->query($sql);
  203. $temp = array();
  204. while ($abc = $result->fetch_array()) 
  205. {
  206. $temp[]=array('id' => $abc['id'], 'title' => $abc['title']);
  207. }
  208.  
  209. return $temp;
  210. }
  211. }
  212. ?>


Adrian.

Ten post edytował adriano321 14.02.2008, 18:28:12
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: 30.12.2025 - 07:58