Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Początki z programowaniem obiektowym - klasa artykuł, Proszę o opinie sugestie
czarek1986
post
Post #1





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 15.09.2008

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


Witam

Od jakiegoś czasu interesuje się programowaniem obiektowym, ale od niedawna zdecydowałem się stworzyć coś własnego. Będzie to mój pierwszy obiektowy (przynajmniej w części) CMS. chciałbym przedstawić wam klasę artykułu do oceny. Prosze o konstruktywną krytykę (IMG:style_emoticons/default/smile.gif)

  1. <?php
  2.  
  3. class Artykul {
  4.  
  5. //zawiera unikalny numer identyfikujący artykuł w bazie danych
  6. private $id;
  7. //zawiera nazwę autora tworzacego artykuł
  8. private $autor;
  9. //zawiera nazwę kategorii do której przyporządkowany jest artykuł
  10. private $kategoria;
  11. //zaiwera tytuł artykułu
  12. private $tytul;
  13. //zawiera wstępny tekst artykułu
  14. private $naglowek;
  15. //zawiera główną treść artykułu
  16. private $tekst_artykulu;
  17. //zawiera datę utworzenia artykułu !!Unixowy znacznik czasu
  18. private $utworzony;
  19. //zawiera datę ostatniej modyfikacji artykułu !!Unixowy znacznik czasu
  20. private $zmodyfikowany;
  21. //zawiera datę ostatniej publikacji artykułu !!Unixowy znacznik czasu
  22. private $opublikowany;
  23. //określa czy artykuł jest nowo utworzony, czy został wczytany z bazy danych
  24. private $new;
  25.  
  26.  
  27.  
  28. public function __construct($id=NULL)
  29. {
  30. if($id)
  31. {
  32. $this->id_art = $id;
  33. $db = Database::GetInstance();
  34. $sql = "SELECT *
  35. FROM j_artykuly
  36. WHERE id = $id";
  37.  
  38. $art = $db->select($sql);
  39.  
  40. if(!$art)
  41. throw new Exception('Wybrany artykuł nie istnieje');
  42.  
  43. $this->new = false;
  44. $this->set($art[0]);
  45.  
  46. }
  47. else
  48. $this->new = true;
  49.  
  50. }
  51.  
  52. /**
  53. * Metoda zwraca wartość jednego wybranego pola klasy
  54. *
  55. * @param name - nazwa pola w klasie, której wartość chcemy uzyskać
  56. **/
  57.  
  58. public function getOne($name)
  59. {
  60. if(property_exists(get_Class($this), $name))
  61. return $this->$name;
  62. else
  63. throw new Exception('Klasa '.get_class($this).' nie posiada pola '.$name);
  64. }
  65.  
  66. /**
  67. *
  68. * Metoda zwraca wartości wszystkich pól klasy
  69. *
  70. * @return tablica z danymi wszystkich pól;
  71. *
  72. **/
  73.  
  74. public function getAll()
  75. {
  76.  
  77. $arData = array(
  78. 'id' => $this->id,
  79. 'autor' => $this->autor,
  80. 'kategoria' => $this->kategoria,
  81. 'tytul' => $this->tytul,
  82. 'naglowek' => $this->naglowek,
  83. 'tekst_artykulu' => $this->tekst_artykulu,
  84. 'utworzony' => $this->utworzony,
  85. 'zmodyfikowany' => $this->zmodyfikowany,
  86. 'opublikowany' => $this->opublikowany,
  87. );
  88.  
  89. return $arData;
  90. }
  91.  
  92.  
  93. /**
  94. *
  95. * Metoda służy do ustawienia wartości pól w klasie
  96. *
  97. [email="*@Param"]*@Param[/email] arData- tablica przechowująca nazwy pól i odpowiadające im wartości
  98. *
  99. **/
  100.  
  101. public function set(array $arData)
  102. {
  103. foreach($arData as $key => $value)
  104. {
  105. if($key == 'id' && $this->new)
  106. throw new Exception("Wartość pola 'id' może być nadana tylko automatycznie");
  107.  
  108. if(property_exists(get_Class($this), $key))
  109. {
  110. $this->$key = $value;
  111. }
  112. else
  113. throw new Exception('Klasa '.get_class($this).' nie posiada pola '.$key);
  114. }
  115. }
  116.  
  117.  
  118.  
  119. /**
  120. *
  121. * Metoda Tworząca artykuł w bazie danych
  122. *
  123. **/
  124.  
  125. public function createArt()
  126. {
  127. if($this->new)
  128. {
  129. $this->checkRequiredData();
  130.  
  131. $db = Database::getInstance();
  132. if($db->Insert('j_artykuly', $this->getAll()) > 0);
  133. return true;
  134. }
  135.  
  136. throw new Exception('Bierzący artykuł już istnieje w bazie danych. Można go tylko zaktualizować');
  137. }
  138.  
  139.  
  140. /**
  141. *
  142. * Metoda aktualizująca dane artykułu w bazie danych
  143. *
  144. **/
  145.  
  146. public function updateArt()
  147. {
  148. if(!$this->new)
  149. {
  150. $this->checkRequiredData();
  151.  
  152. $db = Database::getInstance();
  153. $arConditions['id']=$this->id;
  154. if($db->Update('j_artykuly', $this->getAll(), $arConditions) > 0);
  155. return true;
  156. }
  157.  
  158. throw new Exception('Musisz najpierw utworzyć artykuł w bazie danych aby móc go edytować');
  159. }
  160.  
  161.  
  162. /**
  163. *
  164. * Metoda usuwająca artykuł z bazy danych
  165. *
  166. **/
  167.  
  168. public function delArt()
  169. {
  170. if(!$this->new)
  171. {
  172. $this->checkRequiredData();
  173.  
  174. $db = Database::getInstance();
  175. $arWhere = array("id = ".$this->id);
  176. if($db->delete('j_artykuly', $arWhere) > 0)
  177. return true;
  178. }
  179.  
  180. throw new Exception('Nie można usunąć bierzącego artykułu, ponieważ nie został jeszcze zapisany w bazie danych.');
  181. }
  182.  
  183.  
  184. /**
  185. *
  186. * Metoda sprawdzająca czy pola, które nie mogą być puste w bazie danych, są wypełnione danymi
  187. *
  188. **/
  189.  
  190. private function checkRequiredData()
  191. {
  192. $arData = array();
  193. $arData = $this->getAll();
  194. $arEmpty = array();
  195. foreach($arData as $key => $value)
  196. {
  197. if($key=='autor' || $key=='kategoria' || $key=='tytul' || $key=='naglowek' || $key=='utworzony')
  198. {
  199. if(!$value)
  200. $arEmpty[]=$key;
  201. }
  202. }
  203.  
  204. if(count($arEmpty) > 0)
  205. {
  206. $empty = implode(', ', $arEmpty);
  207. throw new Exception('Wymagane pola '.$empty.' są puste.');
  208. }
  209.  
  210. return true;
  211. }
  212.  
  213.  
  214. }
  215.  
  216. ?>


Ten post edytował erix 25.08.2009, 11:26:21
Powód edycji: [erix] przeniosłem
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: 3.10.2025 - 16:15