Kilka tygodni temu po raz pierwszy zetknąłem się z OOP, przeglądając posty na forum. Zaciekawiło mnie to, dlatego zacząłem czytać trochę artykułów o programowaniu obiektowym, kupiłem nawet książkę, gdzie są opisane tego podstawy. W końcu udało mi się napisać jakąś klasę (do tej pory uczyłem się teoretycznie ). Jest to mechanizm obsługi sesji oparty o bazy danych MySQL. Przedstawiam go poniżej. Chciałbym prosić nie tylko o ocenę, ale też o uwagi na temat co robię źle, co powinenem zmienić, co jest niezgodne z zasadami programowania obiektowego itp. Dzięki temu może nauczę się tworzyć lepsze i bardziej wydajne klasy. Oto kod:
<?php class Sessions { /* Sekcja zmiennych, odpowiadających za połączenie z bazą danych */ // Nazwa użytkownika. private $user = "xxx"; // Hasło. private $pswd = "xxx"; // Host (nazwa serwera). private $host = "localhost"; // Nazwa bazy danych. private $db = "sesje"; // Połączenie z bazą danych. private $connect; /* Zmienne opisujące daną sesję */ // Nazwa sesji. private $name; // Wartość sesji. private $value; // Czas działania. private $timeout; // Adrs domeny, w której ma działać sesja. private $domain; /* Funkcja konstrukcjuna, odpowiedzialna za połączenie z serwerem MySQL. */ public function __construct () { $this->connect = mysql_connect ($this->host, $this->user, $this->pswd) or die ("Nie udało się połączyć z bazą danych. ".mysql_error()); } /* Funkcja inicjująca sesję. */ private function init ($name, $value, $timeout, $domain='/') { $this->name = $name; $this->value = $value; $this->timeout = $timeout; $this->domain = $domain; return TRUE; } /* Funkcja sprawdzająca istnienie danej sesji. */ private function check ($name) { $check_query = "SELECT * FROM sessions WHERE name='$name'"; if ($row) { $this->init ($row['name'], $row['value'], $row['timeout'], $row['domain']); // Sprawdzenie, czy dana sesja nie powinna już wygasnąć. $this->destroy ($this->name); } // Sprawdzenie, czy aktualna ścieżka jest zgodna ze ścieżką działania sesji. return TRUE; } else { return FALSE; } } else { return FALSE; } } /* Funkcja pozwalająca utworzyć nową sesję. */ public function create ($name, $value, $timeout, $domain) { if (!$this->check ($name)) { $this->init ($name, $value, $time, $domain); $create_query = "INSERT INTO sessions (name, value, timeout, domain) VALUES ('$this->name', '$this->value', '$this->timeout', '$this->domain')"; if ($create) { return TRUE; } else { return FALSE; } } } /* Funkcja pozwalająca odczytać już istniejącą sesję. */ public function read ($name) { if (!$this->check ($name)) { return FALSE; } else { $sel_query = "SELECT * FROM sessions WHERE name='$name'"; $this->init ($row['name'], $row['value'], $row['timeout'], $row['domain']); return $this->value; } } /* Funkcja niszcząca sesję. */ public function destroy ($name) { $del_query = "DELETE FROM sessions WHERE name='$name'"; return TRUE; } else { return FALSE; } } /* Destruktor, zamyka połączenie z bazą danych */ public function __destruct () { } } ?>
Przykład użycia:
<?php require_once ('sessions.php'); $session = new Sessions; $session->create ("user", "zbig", 180, "/admin/"); // Tworzy sesję "user" o wartości "zbig", działającą w obrębie katalogu /admin/ przez 3 minuty. $session->read ("user"); // Odczytuje sesję i zwraca jej wartość (w tym przypadku "zbig"). $session->destroy ("user"); // Niszczy aktualną sesję, zwraca TRUE jeśli usunięcie się powiedzie lub FALSE, je
śli nie. ?>
Z góry dziękuje i pozdrawiam!