Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Podanie nazwy metody przy tworzeniu obiektu klasy, Czy tak się da zrobić oraz w wskazówki w napisaniu poprawieniu klasy.
arzach
post 24.10.2010, 20:28:54
Post #1





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 27.11.2008

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


Witam napisałem kod i ma on za zadanie dodawać lub odejmować pkt za daną czynność na stronie np. gdy user doda komentarz. Jeśli admin usunie np. komentarz danego użytkownika wtedy usuwa mu liczbę pkt.

I chodzi mi żeby to zrobić tak że przy tworzeniu obiektu podawać user_id, identyfikator kategorii oraz nazwę metody jaka ma być wykonywana np.

  1. new Eps(12, 'A', $this->update_point());


tylko wiem że tak się nie da. Wiec proszę o wskazówki jak powinna być napisana taka klasa bo wiem że da się to napisać prościej. Proszę o wskazówki ogarniętych ludzi w OOP.

Kod.

  1. abstract class Eps_Cat_Point {
  2. protected $eps_cat_point = array('A' => 3, 'C' => 5, 'D' => 2);
  3.  
  4. // Dane beda pochodzic z bazy
  5. // Litera to identyfikator kategorii za co dostaje sie pkt np A za artykul 3 pkt.
  6.  
  7. }
  8.  
  9. class Eps extends Eps_Cat_Point {
  10.  
  11. public $user_id;
  12. public $cat_point;
  13. public $query;
  14.  
  15. public function __construct($user_id, $cat_point) {
  16.  
  17. if($this->setUser_id($user_id) && $this->setCat_Point($cat_point)){
  18. $this->user_id = $user_id;
  19. $this->cat_point = $cat_point;
  20. }
  21.  
  22. }
  23.  
  24. public function update_point(){
  25. $this->query = "UPDATE tabela SET user_point=user_point+'".$this->eps_cat_point[$this->cat_point]."' WHERE user_id='".$this->user_id."'";
  26. return $this->query;
  27. }
  28.  
  29. public function delete_point(){
  30. $this->query = "UPDATE tabela SET user_point=user_point-'".$this->eps_cat_point[$this->cat_point]."' WHERE user_id='".$this->user_id."'";
  31. return $this->query;
  32. }
  33.  
  34.  
  35.  
  36. public function setUser_id($user_id) {
  37.  
  38. if(!is_int($user_id)) {
  39. die("Niepoprawna wartosc user_id");
  40. return false;
  41. } else {
  42. return true;
  43. }
  44.  
  45. }
  46.  
  47. public function setCat_Point($cat_point) {
  48.  
  49. if(!preg_match("/^[A-Z]{1}$/", $cat_point)) {
  50. die("Niepoprawna wartosc cat_point");
  51. return false;
  52. } else {
  53. return true;
  54. }
  55. }
  56.  
  57. }
  58.  
  59.  
  60. $eps = new Eps(12, 'A');
  61. echo $eps->delete_point();


Ten post edytował arzach 24.10.2010, 20:29:32
Go to the top of the page
+Quote Post
marcio
post 24.10.2010, 20:31:14
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


nie rozumiem, ale mozesz podawac 3 parametr do __construct() jako string i potem wywolywac w nim dana metode ;]


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Misiur66
post 24.10.2010, 20:32:53
Post #3





Grupa: Zarejestrowani
Postów: 170
Pomógł: 11
Dołączył: 2.03.2008
Skąd: Lublin

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


Pierwsze co mi się nasunęło do głowy: call_user_method. Parametr jako string.

/e: Podsekcja alternatywy winksmiley.jpg

Ten post edytował Misiur66 24.10.2010, 20:33:55
Go to the top of the page
+Quote Post
Crozin
post 24.10.2010, 20:41:24
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Takie coś jak ilość punktów przypisanych do danej kategorii nie powinno być zapisane na sztywno w kodzie klasy.
2. Aktualizację tych punktów powinieneś przenieść tuż pod usunięcie/dodanie rekordu do bazy, a całość objąć transakcją jeżeli jeszcze tak nie jest.
3.
  1. //...
  2. $points = $category->getPoints();
  3.  
  4.  
  5. // START TRANSACTION;
  6. // DELETE FROM cateogry WHERE id = ?; # $id
  7. // UPDATE user SET points = points - ? WHERE id = ?; # $points $uid
  8. // COMMIT;


Swoją drogą:
1. Cały ten mechanizm najlepiej by było przenieść do bazy danych w postaci triggera.
2. Używaj wyjątków.
3. Masz metody, które sugerują, że są setterami, a sprawdzają poprawność danych, wtf?
4. Za potworki w nazwach typu setCat_id powinno się...
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: 31.07.2025 - 10:47