Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa PHP - system artykułów
Forum PHP.pl > Inne > Oceny
emajl22
Postanowiłem wziąć się na poważnie za programowanie obiektowe i stworzyłem swoją pierwszą klasę. Przeczytałem chyba wszystkie artykułu na temat programowania obiektowego, ale nadal czuję, że to nie jest jeszcze to.

Chciałem napisać klasę - system artykułów, zacząłem tak:

  1. <?php
  2.  
  3. // Article Class
  4.  
  5. class Article {
  6.  
  7. public function connectDB($host, $user, $pass, $database) {
  8.  
  9. mysql_connect($host, $user, $pass) or DIE(mysql_error());
  10. mysql_select_db($database) or DIE(mysql_error());
  11. mysql_query("SET NAMES UTF8") or DIE(mysql_error());
  12.  
  13. }
  14.  
  15. public function newArticle($title, $text, $author) {
  16.  
  17. mysql_query("INSERT INTO `articles` VALUES (null, '$title', '$text', '$author', now())");
  18.  
  19. }
  20.  
  21. public function editArticle($id, $title, $text, $author) {
  22.  
  23. mysql_query("UPDATE `articles` SET `title` = '$title', `text` = '$text', `author` = '$author' WHERE `id` = '$id'");
  24.  
  25. }
  26.  
  27. public function deleteArticle($id) {
  28.  
  29. mysql_query("DELETE FROM `articles` WHERE `id` = '$id'");
  30.  
  31. }
  32.  
  33. }
  34.  
  35. ?>


A tak sobie tego używam:

  1. <?php
  2.  
  3. require_once('article.class.php');
  4.  
  5. $article = new Article;
  6. $article->connectDB("localhost", "root", "", "article");
  7. $artile->newArticle("Tytuł artykułu", "Treść", "Autor");
  8.  
  9. ?>


Chciałbym się dowiedzieć co o tym sądzicie, czy dobrze zacząłem to pisać czy nie. Aha i możecie podpowiedzieć co w takiej klasie powinno się znajdować, a co nie. Będę wdzięczny za wszystkie podpowiedzi smile.gif
phpion
Moim zdaniem źle do tego podszedłeś. Pomyśl logicznie: dlaczego obiekt "artykuł" ma mieć możliwość np. usuwania się? W klasie Article trzymałbym informacje o artykule (czyli np. tytuł, treść). Jako metody stworzyłbym takie metody, które operują bezpośrednio na obiekcie (np. get_short_content()). Mechanizm dodawania/usuwania/edycji artykułów przeniósłbym do klasy modelu, np. Article_Model. Dla przykładu: metoda Article_Model::get_by_id($id) pobierałaby z bazy danych dane artykułu na podstawie jego id i zwracała je w postaci obiektu klasy Article. Wtedy miałoby to ręce i nogi smile.gif

Poza tym zadbaj o bezpieczeństwo. Przykładowo: jeśli do metody usuwającej artykuł jako parametr przekażemy 1' OR 'x' = 'x to polecą nam wszystkie rekordy z tabeli. Ja osobiście w przypadku przekazywania identyfikatorów stosuję po prostu rzutowanie na liczbę całkowitą ((int)$id).
emajl22
Cytat(phpion @ 8.03.2011, 12:45:23 ) *
Pomyśl logicznie: dlaczego obiekt "artykuł" ma mieć możliwość np. usuwania się?

Przecież nie usuwam obiektu, tylko artykuł z bazy danych. Chyba, że źle zrozumiałem? :/

Cytat(phpion @ 8.03.2011, 12:45:23 ) *
Poza tym zadbaj o bezpieczeństwo. Przykładowo: jeśli do metody usuwającej artykuł jako parametr przekażemy 1' OR 'x' = 'x to polecą nam wszystkie rekordy z tabeli.

Wiem o tym, ale to robię przed wrzuceniem tego do metody, np:
  1. $id = intval($_GET['id']);
  2. $article->deleteArticle($id);
Daiquiri
Pytanie: każdy obiekt będzie wywoływał nowe połączenie z bazą? I tak swoją drogą... masz obiekt, który nie robi niczego innego jak zwykłe operacje na bazie danych. Phpion dobrze zasugerował Ci oddzielenie logiki biznesowej. Może warto pomyśleć o akcesorach?
emajl22
Nie mówię, że nie macie racji, ale do końca nie wiem o o chodzi z tym modelem :/ Może ktoś jaśniej na ten temat?

i to prawda, że w klasach nie powinno się nic echo'wać?
Daiquiri
Model - logika biznesowa, czyli operacje na danych. I tak swoja drogą pozwolę sobie zalinkować do Zyxa, jest tam nieźle opisane MVC smile.gif.
lukaskolista
co ma piernik do wiatraka, a wlasciwie klasa do MVC?
Daiquiri
Cytat(lukaskolista @ 1.04.2011, 21:21:08 ) *
co ma piernik do wiatraka, a wlasciwie klasa do MVC?
Zechciej czytać cały temat.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.