Witam!
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
![tongue.gif](http://forum.php.pl/style_emoticons/default/tongue.gif)
). 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ąć.
if (time() > $this->timeout) { $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)) {
$time = time() + $timeout; $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!