Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kilka klas i ich implementacja.
Forum PHP.pl > Forum > PHP > Object-oriented programming
marcio
WItam w jednym z poprzednich tematow byl link do faq z wikibooks i jako zadanie dla siebie postanowilem rozbudowac sobie tamten przyklad zrobilem jak narazie 2 klasy tworze 3.

1 klasa sluzy do logowania dla mysql jak i dla plikow *.txt -> http://3paste.com/s/374
2 klasa do rejestracji w 2 wyborach jak wyzej. -> http://3paste.com/s/378

Ogolnie plik mysqlDriver.php zawiera prosta klase z debilnym funkcjami tak tylko zeby pocwiczyc tongue.gif

Chodzi mi o to czy dobrze wszystko zaimplementowalem, co byscie poprawili, co jest do dupy a co jest good.

Czy np logowanie lepiej by wygladalo gdybym w klasie Login mial 2 publiczne pola np $nick i $pass i logowanie np tworzyl tak zamiast przekazywac zmienne z posta do funkcji login():
  1. <?php
  2. include('form.php');
  3. include('classAuth.php');
  4.  
  5. if(isset($_POST['login']) && isset($_POST['pass'])) {
  6.  
  7.  if(TYPE == 'SQL') $user = new Login(new MySqlAuth(new MySqlDriver('***', '***', '***', '***')));
  8.  
  9.  else $user = new Login(new FileAuth('users.txt'));
  10.  
  11.   $user -> nick = $_POST['login'];
  12.   $user -> password = $_POST['pass'];
  13.   echo($user -> AuthLogin());
  14.  
  15. }
  16. ?>

I tak samo jesli chodzi o rejestracje jak i 3 klase ktora pisze edytowanie/usuwanie user'ow lepiej przekazywac wszystko do funckji lub ustawiac pola po instancji klasy lub to zalezy co sie robi?

Jak wy robicie co polecacie??

Ogolnie czekam na szczery komentarz ewentualne zmiany w kodzie i przedstawienie mi go bym mogl sie w koncu czegos pozytywnego nauczyc tongue.gif

P.S kod dalem na inny srv by nie robic burdelu w watku.

P.S2 tak wyglada np podstrona dla zalogowanych user'ow: http://3paste.com/s/376

Jakies sugestie??

EDIT:Link zostal poprawiony poprostu przegladalem ostatnio dodane kody na 3paste i przez przypadek skopiowalem nie ten link.
zbig
Witam !

Na wstepie musze powiedziec ze drugi link ktory podales to nie jest niestety " klasa do rejestracji " tylko implementacja scrollowanej textArea w Swingu biggrin.gif . Ale to szczegol .
Co do rozwiazania logowania to moim zdaniem jest ok.
Podoba mi sie mozliwosc podania w klasie login zrodla danych , jak i zdefiniowanie ewentualnego drivera.
Jedyna sugestia z mojej strony :
Klasa logowania powinna realizowac mechanizm autentyfikacji usera ale niekoniecznie musi posiadac pola takie jak nick czy password zwiazane bezposrednio z userem.
Generalnie jej zadaniem jest proba zalogowania i stwierdzenie czy logowanie sie powiodlo czy nie.

Do implementacji danych usera uzylbym jakiegos modelu dziedziny z polami zwiazanymi typowo z userem a samego sprawdzenie przy probie logowania
dokonalbym raczej jakos
  1. <?php
  2. $login->doAuth($user->getNick,$user->getPassword)
  3. ?>


A propos przekazywania zmiennych do funkcji/constuctora vs ustawianiu pol w instancji to uwazam ze dobrze jest dac mozliwosc wyboru uzywajacemu twoja klase. Czyli generalnie fajnie jest jezeli klasa posiada obie mozliwosci.

Pozdrawiam
marcio
Cytat
Na wstepie musze powiedziec ze drugi link ktory podales to nie jest niestety " klasa do rejestracji " tylko implementacja scrollowanej textArea w Swingu biggrin.gif . Ale to szczegol .

Dodalem EDIT do pi

Cytat
Klasa logowania powinna realizowac mechanizm autentyfikacji usera ale niekoniecznie musi posiadac pola takie jak nick czy password zwiazane bezposrednio z userem.
Generalnie jej zadaniem jest proba zalogowania i stwierdzenie czy logowanie sie powiodlo czy nie.

Czy moglbys rozwinac twoja odpowiedz bo nie bardzo rozumiem.

Cytat
Do implementacji danych usera uzylbym jakiegos modelu dziedziny z polami zwiazanymi typowo z userem a samego sprawdzenie przy probie logowania
dokonalbym raczej jakos

Tego tez nie bardzo rozumiem.

Cytat
propos przekazywania zmiennych do funkcji/constuctora vs ustawianiu pol w instancji to uwazam ze dobrze jest dac mozliwosc wyboru uzywajacemu twoja klase. Czyli generalnie fajnie jest jezeli klasa posiada obie mozliwosci.

To kumam chodz ci np o taka implementacje klasy Login i jej funkcji AuthLogin() i robienie nowej instancji:
  1. <?php
  2. include_once('mysqlDriver.php');
  3.  
  4. interface TAuth {
  5.  
  6. public function login($login, $password);
  7.  
  8. }
  9.  
  10. //tu taka sama implementacja klas MySqlAuth i FileAuth
  11.  
  12. class Login {
  13.  
  14. // zostawiam pola co byly wczesniej i dodaje 2 pola publiczne:
  15.  
  16. public $name;
  17. public $pwd;
  18. private $nick;
  19. private $auth;
  20.  
  21. public function __construct($auth) {
  22.  
  23. $this -> auth = $auth;
  24.  
  25.  }
  26.  
  27. //metody statyczne LoginAuth i LogOut zostaja takie same.
  28.  
  29. public function AuthLogin() {
  30.  
  31. $this -> name = '';
  32. $this -> pwd = '';
  33. $usr = $_POST['login'];
  34. $haslo = $_POST['pass']
  35.  
  36.  if($this -> name == '' && $this -> pwd == '') $user = $this -> auth -> login($usr, $haslo);
  37.  
  38.  else if($this -> != '' && $this -> pwd != '') $user = $this -> auth -> login($this -> name, $this -> pwd);
  39.  
  40. if($user) {
  41.  
  42.   $this -> nick = $user['login'];
  43.   $_SESSION['login'] = true;
  44.   $_SESSION['name'] = $this -> nick;
  45.   header("Location: user.php");
  46.  
  47.      }
  48.  
  49.  else return '<div style="margin:auto;padding:5px;width:25%;border:solid 1px #FF0000;background-color:#FFFFFF;color:#FF0000;text-align:center;">Podano zle dane.</div>';
  50.    
  51.   }
  52.  
  53. public function __destruct() {
  54.  
  55. unset($this -> nick);
  56. unset($this -> auth);
  57.  
  58.   }
  59.  
  60. }
  61.  
  62. //Instancja klasy Login wygladala by tak jesli nie ustawiam pola name i pola pwd:
  63.  
  64. include('form.php');
  65. include('classAuth.php');
  66.  
  67. if(isset($_POST['login']) && isset($_POST['pass'])) {
  68.  
  69.  if(TYPE == 'SQL') $user = new Login(new MySqlAuth(new MySqlDriver('85.17.1.175', 'marcios', 'marciniak15', 'marcios')));
  70.  
  71.  else $user = new Login(new FileAuth('users.txt'));
  72.  
  73.   echo($user -> AuthLogin());
  74.  
  75. }
  76.  
  77.  
  78. //Z ustawieniem pola name i pola pwd:
  79.  
  80. include('form.php');
  81. include('classAuth.php');
  82.  
  83. if(isset($_POST['login']) && isset($_POST['pass'])) {
  84.  
  85.  if(TYPE == 'SQL') $user = new Login(new MySqlAuth(new MySqlDriver('85.17.1.175', 'marcios', 'marciniak15', 'marcios')));
  86.  
  87.  else $user = new Login(new FileAuth('users.txt'));
  88.  
  89.   $user -> name = $_POST['login'];
  90.   $user -> pwd = $_POST['pass'];
  91.  
  92.   echo($user -> AuthLogin());
  93.  
  94. }
  95. ?>

Tylko nie wiem czy to zadziala bo nie sprawdzalem jak sprawdze to dopiero wieczorem bo glownie chodzi o to czy te warubki zadzialaja:
  1. <?php
  2.   if($this -> name == '' && $this -> pwd == '') $user = $this -> auth -> login($usr, $haslo);
  3.  
  4.   else if($this -> != '' && $this -> pwd != '') $user = $this -> auth -> login($this -> name, $this -> pwd);
  5. ?>

Poniewaz nie jestem znawca to jesli nie ustawie pol namei pwd czyli 1 przyklad tworzenia instacnji to powinno wywolac sie to:
Kod
$user = $this -> auth -> login($usr, $haslo);

Jesli ustawie:
Kod
$user = $this -> auth -> login($this -> name, $this -> pwd);

Tylko nie wiem czy jak nie ustawie pol name i pwd to beda one empty czyli == '' lub beda null i nie wiem czy dobry jest warunek i czy na tej zasadzie ma to dzialac lub macie jakies inne sposoby na to bo w teorii powinno to dzialac.
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.