Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Podanie nazwy metody przy tworzeniu obiektu klasy
Forum PHP.pl > Forum > Przedszkole
arzach
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();
marcio
nie rozumiem, ale mozesz podawac 3 parametr do __construct() jako string i potem wywolywac w nim dana metode ;]
Misiur66
Pierwsze co mi się nasunęło do głowy: call_user_method. Parametr jako string.

/e: Podsekcja alternatywy winksmiley.jpg
Crozin
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ę...
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.