Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klasa PHP - system artykułów, Klasa
emajl22
post 8.03.2011, 12:32:28
Post #1





Grupa: Zarejestrowani
Postów: 273
Pomógł: 21
Dołączył: 28.11.2010

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


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

Ten post edytował emajl22 8.03.2011, 12:36:30


--------------------
Go to the top of the page
+Quote Post
phpion
post 8.03.2011, 12:45:23
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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).
Go to the top of the page
+Quote Post
emajl22
post 8.03.2011, 12:59:22
Post #3





Grupa: Zarejestrowani
Postów: 273
Pomógł: 21
Dołączył: 28.11.2010

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


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);


Ten post edytował emajl22 8.03.2011, 13:01:15


--------------------
Go to the top of the page
+Quote Post
Daiquiri
post 8.03.2011, 13:03:25
Post #4





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




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?
Go to the top of the page
+Quote Post
emajl22
post 8.03.2011, 13:15:51
Post #5





Grupa: Zarejestrowani
Postów: 273
Pomógł: 21
Dołączył: 28.11.2010

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


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ć?


--------------------
Go to the top of the page
+Quote Post
Daiquiri
post 8.03.2011, 13:20:01
Post #6





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Model - logika biznesowa, czyli operacje na danych. I tak swoja drogą pozwolę sobie zalinkować do Zyxa, jest tam nieźle opisane MVC smile.gif.
Go to the top of the page
+Quote Post
lukaskolista
post 1.04.2011, 20:21:08
Post #7





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


co ma piernik do wiatraka, a wlasciwie klasa do MVC?
Go to the top of the page
+Quote Post
Daiquiri
post 1.04.2011, 20:49:03
Post #8





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Cytat(lukaskolista @ 1.04.2011, 21:21:08 ) *
co ma piernik do wiatraka, a wlasciwie klasa do MVC?
Zechciej czytać cały temat.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:18