Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Klasy abstrakcyjne...
sloenthran
post 29.08.2013, 07:34:52
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 2
Dołączył: 26.06.2013

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


Otóż mam taki kod:

  1. <?php
  2.  
  3. class Buy
  4. {
  5.  
  6. private $_id_serwera;
  7. private $_flaga;
  8. private $_flaga_dostepu;
  9. private $_dni;
  10. private $_time;
  11.  
  12. public function __construct($id_serwera, $flaga, $flaga_dostepu, $dni, $time)
  13. {
  14.  
  15. $this->_id_serwera = $id_serwera;
  16. $this->_flaga = $flaga;
  17. $this->_flaga_dostepu = $flaga_dostepu;
  18. $this->_dni = $dni;
  19. $this->_time = $time;
  20.  
  21. }
  22.  
  23. public function sprawdz($kod_sms, $numer)
  24. {
  25.  
  26. $Zapytanie = @mysql_query("SELECT `api_gamesol` FROM ustawienia");
  27. $Pobieranie = @mysql_fetch_array($Zapytanie);
  28.  
  29. $API = $Pobieranie['api_gamesol'];
  30.  
  31. if($kod_sms == 'test1' || $kod_sms == 'test2' || $kod_sms == 'test3' || $kod_sms == 'test4' || $kod_sms == 'test5' || $kod_sms == 'test6' || $kod_sms == 'test9' || $kod_sms == 'test17' || $kod_sms == 'test20' || $kod_sms == 'test25')
  32. {
  33.  
  34. return false;
  35.  
  36. }
  37.  
  38. $wynik = file_get_contents("http://gamesol.pl/api/sms-pro.php?id=".$API."&taryfa=".$numer."&kod=".$kod_sms."&opis=sloenthran:shop");
  39.  
  40. $wynik_tab = json_decode($wynik, true);
  41.  
  42. if($wynik_tab['blad'] != 0)
  43. {
  44.  
  45. return false;
  46.  
  47. }
  48.  
  49. else
  50. {
  51.  
  52. return true;
  53.  
  54. }
  55.  
  56. return false;
  57.  
  58. }
  59.  
  60. public function zakoncz($nick, $haslo)
  61. {
  62.  
  63. if(!empty($nick) and !empty($haslo))
  64. {
  65.  
  66. $pass = md5($haslo);
  67. $upraw = $this -> _flaga;
  68. $flagi = $this -> CheckFree($this->_id_serwera, $nick, $upraw);
  69.  
  70. if(!$flagi)
  71. {
  72.  
  73. $exp = $this->_time + ($this->_dni * 86400);
  74.  
  75. mysql_query("INSERT INTO `amx_amxadmins` VALUES(NULL, '{$nick}', '{$pass}', '{$upraw}', '{$this->_flaga_dostepu}', '{$nick}', '{$nick}', 0, 0, '{$this->_time}', '{$exp}', {$this->_dni})");
  76.  
  77. $id = mysql_insert_id();
  78.  
  79. mysql_query("INSERT INTO `amx_admins_servers` VALUES({$id}, {$this->_id_serwera}, '', 'no')");
  80.  
  81. return TRUE;
  82.  
  83. }
  84.  
  85. else
  86. {
  87.  
  88. return TRUE;
  89.  
  90. }
  91.  
  92. }
  93.  
  94. return FALSE;
  95.  
  96. }
  97.  
  98. private function CheckFree($sid = 0, $na_co = '', $upraw = '')
  99. {
  100.  
  101. $query = @mysql_query("SELECT * FROM `amx_amxadmins` WHERE `steamid` = '{$na_co}'");
  102.  
  103. if(mysql_num_rows( $query ) > 0)
  104. {
  105.  
  106. $row = mysql_fetch_assoc($query);
  107. $newFlags = $this->sumFlags($row['access'], $upraw);
  108. $ex = ($this->_time + ((($row['expired'] - $this->_time) + ($this->dni * 86400)) / 2));
  109.  
  110. mysql_query("UPDATE `amx_amxadmins` SET `access` = '{$newFlags}' WHERE `steamid` = '{$na_co}'");
  111.  
  112. $query2 = mysql_query("SELECT * FROM `amx_admins_servers` WHERE `admin_id` = '{$row['id']}' AND `server_id` = '{$this->_id_serwera}'");
  113.  
  114. if(mysql_num_rows( $query2 ) > 0)
  115. {
  116.  
  117. return TRUE;
  118.  
  119. }
  120.  
  121. else
  122. {
  123.  
  124. mysql_query("INSERT INTO `amx_admins_servers` VALUES ({$row['id']}, {$this->_id_serwera}, '', 'no')");
  125. return TRUE;
  126.  
  127. }
  128.  
  129. return FALSE;
  130.  
  131. }
  132.  
  133. return FALSE;
  134.  
  135. }
  136.  
  137. private function sumFlags($flagi_a = "", $flagi_b = "")
  138. {
  139.  
  140. for($i = 0; $i < strlen($flagi_b); $i++)
  141. {
  142.  
  143. if(!(strlen(strstr($flagi_a, $flagi_b[$i]))))
  144. $out .= $flagi_b[$i];
  145.  
  146. }
  147.  
  148. $to = str_split($flagi_a . $out);
  149. sort($to);
  150. $ciag = implode('', $to);
  151.  
  152. return $ciag;
  153.  
  154. }
  155.  
  156. }
  157.  
  158. ?>


I ktoś powiedział mi że lepiej abym zamiast za każdym razem ciągle pisać (kilka tych samych klas tylko z zmienioną funkcją sprawdź) to samo to lepiej skorzystać z klas abstrakcyjnych bądź interfejsów... Próbowałem taką klasę samemu jednakże nic mi nie wychodzi... Czy mógłby ktoś z kodu wyżej napisać mi coś takiego?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
buliq
post 29.08.2013, 07:57:37
Post #2





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


interfejs odpada, bo nie zdefiniujesz tych powtarzających się metod.

W abstrakcji generalnie możesz połączyć interfejs z zwykłą klasą. Klasa abstrakcyjna może być zwykłą klasą (powiedzmy). Zatem, utworzenie klasy abstrakcyjnej:

  1. abstract class Name {}


W tej klasie robisz normalne metody, oraz metody abstrakcyjne. Metody abstrakcyjne nie posiadają ciała (definicji) a jedynie ich deklarację (nazwę, parametry, itd.). Przykład:

  1. abstract class Name {
  2.  
  3. public function cosTam($a) {
  4. echo $a;
  5. }
  6.  
  7. abstract public function innaMetoda($b, $c $d = null);
  8.  
  9. }


Następnie robisz drugą klasę która dziedziczy po tej klasie abstrakcyjnej, i tam definiujesz metodę innaMetoda

Ten post edytował buliq 29.08.2013, 08:06:35


--------------------
KTOŚ TU PACZY???

Kompedium wiedzy
Go to the top of the page
+Quote Post
freemp3
post 29.08.2013, 08:00:17
Post #3





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Podstawowe pytanie, czy wiesz na jakiej zasadzie działają klasy abstrakcyjne oraz interfejsy? Pomysł dobry, ale nie ma potrzeby korzystania z klas abstrakcyjnych ani interfejsów. Zamiast nich możesz bezpośrednio dziedziczyć z tej klasy i nadpisywać te metody, które chcesz zmienić.

Odnośnie klas abstrakcyjnych to różnią się od zwykłych tym, że metody nie muszą mieć kodu i nie można z nich tworzyć obiektów. Można z nich jedynie dziedziczyć. Dlatego też klasa abstrakcyjna nie może być jednocześnie finalną. Co oczywiscie nie wyklucza tego, że może mieć finalne metody, pod warunkiem, że metoda nie jest abstrakcyjna wink.gif

Co do interfejsów to jest to spis metod publicznych, które nie mają "ciała". Nie mogą mieć one żadnego kodu oraz dostęp do nich musi być publiczny. Może wydawać się to dziwne, ale przydaje się np. do tworzenia API zewnętrznego. Każda nowa klasa w tedy musi zawierać pewien zestaw metod, które są zdefiniowane właśnie w interfejsie. Co one będą robić zależy już tylko i wyłącznie od klasy, ale wszystkie muszą być zaimplementowane.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
sloenthran
post 29.08.2013, 08:13:08
Post #4





Grupa: Zarejestrowani
Postów: 16
Pomógł: 2
Dołączył: 26.06.2013

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


Czyli rozumiem że jeżeli zapisałbym to tak:

  1. <?php
  2.  
  3. abstract class Buy
  4. {
  5.  
  6. private $_id_serwera;
  7. private $_flaga;
  8. private $_flaga_dostepu;
  9. private $_dni;
  10. private $_time;
  11.  
  12. public function __construct($id_serwera, $flaga, $flaga_dostepu, $dni, $time)
  13. {
  14.  
  15. $this->_id_serwera = $id_serwera;
  16. $this->_flaga = $flaga;
  17. $this->_flaga_dostepu = $flaga_dostepu;
  18. $this->_dni = $dni;
  19. $this->_time = $time;
  20.  
  21. }
  22.  
  23. public function zakoncz($nick, $haslo)
  24. {
  25.  
  26. if(!empty($nick) and !empty($haslo))
  27. {
  28.  
  29. $pass = md5($haslo);
  30. $upraw = $this -> _flaga;
  31. $flagi = $this -> CheckFree($this->_id_serwera, $nick, $upraw);
  32.  
  33. if(!$flagi)
  34. {
  35.  
  36. $exp = $this->_time + ($this->_dni * 86400);
  37.  
  38. mysql_query("INSERT INTO `amx_amxadmins` VALUES(NULL, '{$nick}', '{$pass}', '{$upraw}', '{$this->_flaga_dostepu}', '{$nick}', '{$nick}', 0, 0, '{$this->_time}', '{$exp}', {$this->_dni})");
  39.  
  40. $id = mysql_insert_id();
  41.  
  42. mysql_query("INSERT INTO `amx_admins_servers` VALUES({$id}, {$this->_id_serwera}, '', 'no')");
  43.  
  44. return TRUE;
  45.  
  46. }
  47.  
  48. else
  49. {
  50.  
  51. return TRUE;
  52.  
  53. }
  54.  
  55. }
  56.  
  57. return FALSE;
  58.  
  59. }
  60.  
  61. private function CheckFree($sid = 0, $na_co = '', $upraw = '')
  62. {
  63.  
  64. $query = @mysql_query("SELECT * FROM `amx_amxadmins` WHERE `steamid` = '{$na_co}'");
  65.  
  66. if(mysql_num_rows( $query ) > 0)
  67. {
  68.  
  69. $row = mysql_fetch_assoc($query);
  70. $newFlags = $this->sumFlags($row['access'], $upraw);
  71. $ex = ($this->_time + ((($row['expired'] - $this->_time) + ($this->dni * 86400)) / 2));
  72.  
  73. mysql_query("UPDATE `amx_amxadmins` SET `access` = '{$newFlags}' WHERE `steamid` = '{$na_co}'");
  74.  
  75. $query2 = mysql_query("SELECT * FROM `amx_admins_servers` WHERE `admin_id` = '{$row['id']}' AND `server_id` = '{$this->_id_serwera}'");
  76.  
  77. if(mysql_num_rows( $query2 ) > 0)
  78. {
  79.  
  80. return TRUE;
  81.  
  82. }
  83.  
  84. else
  85. {
  86.  
  87. mysql_query("INSERT INTO `amx_admins_servers` VALUES ({$row['id']}, {$this->_id_serwera}, '', 'no')");
  88. return TRUE;
  89.  
  90. }
  91.  
  92. return FALSE;
  93.  
  94. }
  95.  
  96. return FALSE;
  97.  
  98. }
  99.  
  100. private function sumFlags($flagi_a = "", $flagi_b = "")
  101. {
  102.  
  103. for($i = 0; $i < strlen($flagi_b); $i++)
  104. {
  105.  
  106. if(!(strlen(strstr($flagi_a, $flagi_b[$i]))))
  107. $out .= $flagi_b[$i];
  108.  
  109. }
  110.  
  111. $to = str_split($flagi_a . $out);
  112. sort($to);
  113. $ciag = implode('', $to);
  114.  
  115. return $ciag;
  116.  
  117. }
  118.  
  119. }
  120.  
  121. ?>


  1. class BuyTwo extends Buy
  2. {
  3.  
  4. public function sprawdz($kod_sms, $numer)
  5. {
  6.  
  7. $Zapytanie = @mysql_query("SELECT `api_gamesol` FROM ustawienia");
  8. $Pobieranie = @mysql_fetch_array($Zapytanie);
  9.  
  10. $API = $Pobieranie['api_gamesol'];
  11.  
  12. if($kod_sms == 'test1' || $kod_sms == 'test2' || $kod_sms == 'test3' || $kod_sms == 'test4' || $kod_sms == 'test5' || $kod_sms == 'test6' || $kod_sms == 'test9' || $kod_sms == 'test17' || $kod_sms == 'test20' || $kod_sms == 'test25')
  13. {
  14.  
  15. return false;
  16.  
  17. }
  18.  
  19. $wynik = file_get_contents("http://gamesol.pl/api/sms-pro.php?id=".$API."&taryfa=".$numer."&kod=".$kod_sms."&opis=sloenthran:shop");
  20.  
  21. $wynik_tab = json_decode($wynik, true);
  22.  
  23. if($wynik_tab['blad'] != 0)
  24. {
  25.  
  26. return false;
  27.  
  28. }
  29.  
  30. else
  31. {
  32.  
  33. return true;
  34.  
  35. }
  36.  
  37. return false;
  38.  
  39. }
  40.  
  41. }


To będzie wtedy działać tak samo jakbym zapisał to razem czy czegoś nie rozumiem? smile.gif
Go to the top of the page
+Quote Post
buliq
post 29.08.2013, 08:22:21
Post #5





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


Tak, tylko. Jeżeli definiujesz ze klasa jest abstrakcyjna, warto z tej abstrakcji skorzystać. Nie zadeklarowałeś metody sprawdz w klasie Buy. Deklaracja wymusi na każdej klasie dziedziczącej definicję tej metody.


--------------------
KTOŚ TU PACZY???

Kompedium wiedzy
Go to the top of the page
+Quote Post
freemp3
post 29.08.2013, 08:23:13
Post #6





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Tak. Możesz też dodać w klasie Buy metodę:
Kod
abstract public function sprawdz();

W tedy jak zapomnisz jej dodać w klasie dziedziczącej to wyświetli się błąd, który Ci o tym przypomni wink.gif

Ten post edytował freemp3 29.08.2013, 08:56:55


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
sloenthran
post 29.08.2013, 08:31:00
Post #7





Grupa: Zarejestrowani
Postów: 16
Pomógł: 2
Dołączył: 26.06.2013

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


OK dzięki wam za pomoc smile.gif
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: 19.07.2025 - 09:59