Я программирую серверную часть сайта на PHP, и мне нужно инкапсулировать $ _SESSION в класс.
Я сделал свой урок Session одиночным, но у меня возникли проблемы с его использованием.
class Session
{
private static $instance;
public static $sessionID;
private function __construct()
{
session_start();
self::$sessionID = session_id();
}
public function Session() {
return Session::singleton();
}
public static function singleton()
{
if (!isset(Session::$instance)) {
Session::$instance = new Session();
}
return Session::$instance;
}
public function destroy()
{
foreach ($_SESSION as $var => $val) {
$_SESSION[$var] = null;
}
session_destroy();
}
public function __clone()
{
trigger_error('Clone is not allowed for '.__CLASS__,E_USER_ERROR);
}
public function __get($var)
{
return $_SESSION[$var];
}
public function __set($var,$val)
{
return ($_SESSION[$var] = $val);
}
public function __destruct()
{
session_write_close();
}
public function exist( $var ) {
return isset($_SESSION[ $var ]);
}
}
Работает нормально в 95% случаев. Но иногда, когда я призываю var_dump(Session::singleton());
вывод: object(Session)#2 (0) { }
Мне кажется очевидным, что он создает еще один экземпляр моего класса Session, но я не знаю точно, как это возможно.
Большое спасибо!