Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prosta klasa rotatora linków do analizy
Forum PHP.pl > Forum > PHP > Object-oriented programming
emtiej
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 smile.gif Pomóżcie początkującemu ^^
nospor
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 smile.gif
emtiej
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


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


Teraz już wiem hah smile.gif

Jednak teorii za mało jeszcze hah smile.gif Ok na razie dam się na spokój, ale nie zamykaj proszę tego tematu, wrzucę tu poprawiony kod za kilka dni smile.gif
phpion
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.
zend
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
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-2024 Invision Power Services, Inc.