
Chciałem zrobić sobie klasę do zarządzania sesjami jako pierwsza część do być może czegoś większego, i do wykorzystania przez więcej niż jednego użytkownika. Żeby kod był w miarę modularny, zdecydowałem się na odseparowanie definicji klasy od właściwego kodu, ponadto wartości domyślne dla całego "czegoś" wrzuciłem do pliku inkludowanego. Fragment config.php:
$config['sql']['host'] = "localhost"; $config['sql']['user'] = "user"; $config['sql']['pass'] = "password"; $config['sql']['dbname'] = "database"; $config['sql']['conn'] = "persistent"; $config['sqltables']['login']['users'] = "users"; $config['sqltables']['login']['logusers'] = "logusers";
plik z definicją klasy (class.httpsession.php):
<?php require "config.php"; class HTTPSession { protected $session_time = 0; private $sql_config; public $sql_tables; public $login_page = ""; public $menu_page = ""; protected $handle; // handle to SQL database function HTTPSession ($sql_config='', $sql_tables='', $login_page = "login.php", $menu_page = "index.php", $session_lifetime = 600) { $this->session_time = $session_lifetime; $this->menu_page = $menu_page; $this->login_page = $login_page; // w tych dwóch liniach jest blad "Undefined variable: config" $this->sql_tables = $config['sqltables']['login']; $this->sql_config = $config['sql']; } } // class HTTPSession ?>
W index.php mam:
require "config.php"; require "class.httpsession.php"; // Takie wywołanie działa ZAWSZE $sess = new HTTPSession ($config['sql'], $config['sqltables']['login'], 'l.php', 'm.php', 7200); // A ja jestem leniem, i chciałbym wywoływać tak, żeby brał defaulty z $config... $sess = new HTTPSession ();
Jak widać, w index.php po "require config.php" mogę korzystać z wartości zdefiniowanych w tym pliku. Jeśli taki sam require wystąpi w pliku z definicją klasy, to wewnątrz klasy nie umiem skorzystać z tych wartości (patrz komentarze w kodzie).
Skorzystałem z kawałka kodu: http://wortal.php.pl/Wortal/Artykuly/PHP/A...I/Implementacje
W komentarzach jeden user napisał "Całkiem porządna instrukcja, szkoda, że autor wsadził tam bugi ... takie chyba dla inteligentnych, by sobie poprawili". Czyżby to był właśnie jeden z tych bugów?
Co zrobić (jeśli w ogóle się da?), żeby w definicji obiektu można było skorzystać z wartości konfiguracyjnych zawartych w config.php? Tak, wiem, że można użyć XMLa i są gotowe klasy do parsowania XML - ale to jest moja pierwsza klasa, więc chcę ją napisać od początku do końca, "zatrybić' obiekty, a potem się wezmę za coś więcej...