Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Prosta klasa rotatora linków do analizy, Chciałbym się dowiedzieć co robię źle i jak to powinno wyglądać.
emtiej
post
Post #1





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 12.04.2009
Skąd: Rypin

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


Już od dawna miałem zamiar zacząć pisać coś w OOP, do tej pory tylko teoria z której wiadomo dużo bez praktyki do głowy nie wejdzie i postanowiłem napisać prosty skrypt rotatora linków, stworzyłem klasę "lr" i klasę "admin" która jest rozszerzeniem klasy lr(chciałbym, aby w lr znajdowały się funkcje które wyciągają linki z bazy i takie tam, co chciałbym też wykorzystać w panelu administracyjnym. Dopiero zacząłem i już mam jakieś wątpliwości co do logiki i użyteczności kodu. To mój pierwszy zamach na OOP, proszę o wskazówki co źle robię, jak wy to byście zrobili itp. Rotator ma być prosty, jego funkcje to: dodawanie, usuwanie, edycja dodanych linków. W bazie zrobiłem sobie tabelę "config" w której przechowuję login i hasło administratora.

Tu plik lrclass.php
  1. <?php
  2.  
  3. //-----------------------------------------------------------
  4. //- Klasa rotatora linków -
  5. //-----------------------------------------------------------
  6.  
  7. class lr
  8. {
  9. private function db()
  10. {
  11. $this->dbhost = "localhost";
  12. $this->dbname = "lr";
  13. $this->dbuser = "lg";
  14. $this->dbpass = "lgpass";
  15.  
  16. $conn = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname);
  17.  
  18. return $conn;
  19.  
  20. }
  21.  
  22. public function lr()
  23. {
  24. print_r($this->GetConfig());
  25. }
  26.  
  27. public function GetConfig()
  28. {
  29. // funkcja pobiera i zwraca tabel? config
  30. $db = $this->db();
  31. $query = $db->query("SELECT * FROM config");
  32. $result = $query->fetch_assoc();
  33.  
  34. return $result;
  35. }
  36. public function GetLinks()
  37. {
  38. $db = $this->db();
  39. $query = $db->query("SELECT * FROM links");
  40. $result = $query->fetch_assoc();
  41.  
  42. return $result;
  43. }
  44.  
  45.  
  46.  
  47.  
  48. }
  49.  
  50. ?>
  51.  


adminclass.php
  1. <?php
  2.  
  3. //-----------------------------------------------------------
  4. //- Klasa panelu administracyjnego -
  5. //-----------------------------------------------------------
  6. require_once("lrclass.php");
  7.  
  8. class admin extends lr
  9. {
  10.  
  11. var $admin;
  12.  
  13. public function admin()
  14. {
  15. if(self::IsAdmin())
  16. {
  17. echo "Jesteś zalogowany jako administrator";
  18.  
  19. if($_GET['action'] == 'logout')
  20. {
  21. self::StopAdminSession();
  22. }
  23. }else{
  24. if($_GET['login'] && $_GET['pass'])
  25. {
  26. if(self::login($_GET['login'], $_GET['pass']))
  27. {
  28. echo "Dobre dane do logowania";
  29. }else{
  30. echo "Złe dane do logowania!";
  31. }
  32. }else{
  33. echo "Tu formularz logowania";
  34. echo $_SESSION['login'];
  35. }
  36. }
  37.  
  38. }
  39. public function login($login, $pass)
  40. {
  41. $this->adminlogin = self::GetAdminLogin();
  42. $this->adminpass = self::GetAdminPass();
  43.  
  44. if($login == $this->adminlogin && $pass == $this->adminpass)
  45. {
  46. self::StartAdminSession();
  47. return TRUE;
  48. }else{
  49. return FALSE;
  50. }
  51.  
  52.  
  53. }
  54. public function StartAdminSession()
  55. {
  56. $_SESSION['login'] = TRUE;
  57.  
  58. }
  59. public function StopAdminSession()
  60. {
  61. $_SESSION = array();
  62. }
  63. public function GetAdminLogin()
  64. {
  65. $db = parent::db();
  66. $query = $db->query("SELECT value FROM config where name='adminlogin'");
  67. if(!$db) DIE("Zapytanie się nie powiodło");
  68. $result = $query->fetch_object();
  69. $result = $result->value;
  70.  
  71. return $result;
  72. }
  73. public function GetAdminPass()
  74. {
  75. $db = parent::db();
  76. $query = $db->query("SELECT value FROM config where name='adminpass'");
  77. if(!$db) DIE("Zapytanie się nie powiodło");
  78. $result = $query->fetch_object();
  79. $result = $result->value;;
  80.  
  81. return $result;
  82. }
  83. public function IsAdmin()
  84. {
  85. if($_SESSION['login']){
  86. return TRUE;
  87. }else{
  88. return FALSE;
  89. }
  90. }
  91. }
  92.  
  93. ?>


W klasie lr jest funkcja db(), czy to jest dobry pomysł żeby ją tam umieszczać? Może lepszym wyjściem byłaby osobna klasa do łączenia z bazą? Naprawdę teoretycznie trochę wiem, ale w praktyce wymiękam hah (IMG:style_emoticons/default/smile.gif) Pomóżcie początkującemu ^^

Ten post edytował emtiej 22.03.2010, 13:33:34
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




var $admin;
public function admin()

Jesli juz uzywasz php5 to nie stosuj VAR - jest to wylacznie dla php4 a w php5 tolerowane.



self::StopAdminSession();
wiesz do czego sluzy self:: ?

Włącz sobie wyswietlanie wszystkich bledow a zobaczysz ile ich masz (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
emtiej
post
Post #3





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 12.04.2009
Skąd: Rypin

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


Cytat
Jesli juz uzywasz php5 to nie stosuj VAR


To pozostało z testów

Cytat
Włącz sobie wyswietlanie wszystkich bledow a zobaczysz ile ich masz


(IMG:style_emoticons/default/mellow.gif) ciężko mi je opanować hah (IMG:style_emoticons/default/smile.gif) Masakra
Cytat
self::StopAdminSession();
wiesz do czego sluzy self:: ?


Teraz już wiem hah (IMG:style_emoticons/default/smile.gif)

Jednak teorii za mało jeszcze hah (IMG:style_emoticons/default/smile.gif) Ok na razie dam się na spokój, ale nie zamykaj proszę tego tematu, wrzucę tu poprawiony kod za kilka dni (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
phpion
post
Post #4





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




hah i staraj się nie używać tablic $_GET/$_POST/$_SESSION "na żywca" wewnątrz klas hah lepiej przekazywać konkretne wartości w formie parametrów hah hah hah.
Go to the top of the page
+Quote Post
zend
post
Post #5





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Wywyłując metode getDb kilka razy nawiązujesz połączenie z bazą danych kilkakrotnie

  1.  
  2. myclass {
  3. static $DB = null;
  4.  
  5. public function getDb()
  6. {
  7. if(self::$DB === null)
  8. {
  9. self::$DB = new mysqli('xxx' , 'xxx');
  10. }
  11. }
  12.  
  13. }
  14.  


Takie rozwiązanie zapobiegnie kilkukrotnemu nawiązywaniu połączenia z bazą. Nie myśl też że z poziomu deklarując metodę jako prywatną zapobiegniesz wielokrotnym połączeniom, wystarczy wywołać pobliczną metodę getConfig() dwukrotnie i już mamy jedno niepotrzebne połączenie z bazą.

Kolejną sprawą jest kwestia ustawiania parametrów do połączenia z bazą, powinieneś mieć możliwość ustawienia tych danych z zewnątrz klasy, a nie ustawiać je od środka i w dodatku przy każdym wywołaniu db

Ten post edytował zend 26.03.2010, 20:15:28
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 16:09