Witam!
Zwracam się z pytaniem szczególnie do bardziej zaawansowanych w OOP forumowiczów. Wczoraj napisałem (a przynajmniej starałem się napisać (IMG:
http://forum.php.pl/style_emoticons/default/tongue.gif) ) prosty mechanizm obsługi sesji oparty o bazy danych MySQL. Z programowaniem obiektowym zetknąłem się dopiero nie dawno, przeglądając jakieś posty na forum. Staram się tego nauczyć choć mam jeszcze wiele pytań i wątpliwości. Wracając do mechanizmu: problem polega na tym, że nie mogę odwołać się do funckji w klasie z poziomu innej funkcji (w tej samej klasie). Wyskakuje błąd: Call to undefined function destroy(). Wiem co oznacza, ale nie wiem dlaczego tak się dzieje. 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";
/* Zmienne opisujące daną sesję */
// Identyfikator sesji.
private $id;
// Nazwa sesji.
private $name;
// Wartość sesji.
private $value;
// Czas działania.
private $timeout;
/* Funkcja konstrukcjuna, odpowiedzialna
za połączenie z serwerem MySQL. */
public function __construct () {
}
/* Funkcja pozwalająca utworzyć nową sesję. */
public function create ($name, $value, $timeout) {
$time = time() + $timeout; $create_query = "INSERT INTO sessions (name, value, timeout) VALUES ('$name', '$value', '$time')";
if ($create) {
return TRUE;
} else {
return FALSE;
}
}
/* Funkcja pozwalająca odczytać już
istniejącą sesję. */
public function read ($name) {
$sel_query = "SELECT * FROM sessions WHERE name='$name'";
if ($sel) {
if ($row) {
$this->id = $row['id'];
$this->name = $row['name'];
$this->value = $row['value'];
$this->timeout = $row['timeout'];
if (time() > $this->timeout) { destroy ($this->name);
} else {
return $this->value;
}
} else {
return FALSE;
}
} else {
return FALSE;
}
}
/* Funkcja niszcząca sesję. */
public function destroy ($name) {
if (read ($name) != FALSE) {
$del_query = "DELETE FROM sessions WHERE id=".$this->id." AND name='".$this->name."'";
return TRUE;
} else {
return FALSE;
}
} else {
return FALSE;
}
}
}
?>
Chodzi konkretnie o linijki 72 i 87. Prosiłbym też o podpowiedź co robię źle, co powinienem zmienić w mojej klasie, tak aby była jak najbardziej dopracowana. Proszę o pomoc! (IMG:
http://forum.php.pl/style_emoticons/default/smile.gif)