<?php class MySession { private static $_initiated = FALSE; private static $_dataContainer = array(); public static function init() { if (!self::$_initiated) { session_start(); if (!isset($_SESSION['__data'])) { $_SESSION['__data'] = []; } self::$_dataContainer = &$_SESSION['__data']; } self::$_initiated = TRUE; } private static function _getRealm() { $backtrace = debug_backtrace(); while (count($backtrace) && isset($backtrace[0]['class']) && $backtrace[0]['class'] == get_class()) { array_shift($backtrace); } if (!count($backtrace) || (!isset($backtrace[0]['class']))) { throw new SessionRealmException('Session realm not provided'); } return $backtrace[0]['class']; } public static function get($variable, $realm = NULL) { if (!self::$_initiated) { self::init(); } if (!$realm) { $realm = self::_getRealm(); } if (!isset(self::$_dataContainer[$realm])) { throw new SessionVariableException('Realm '.$realm.' doesn\'t exist'); } if (!isset(self::$_dataContainer[$realm][$variable])) { throw new SessionVariableException('Variable '.$realm.'::'.$variable.' not set'); } return self::$_dataContainer[$realm][$variable]; } public static function set($variable, $value, $realm = NULL) { if (!self::$_initiated) { self::init(); } if (!$realm) { $realm = self::_getRealm(); } if (!isset(self::$_dataContainer[$realm])) { self::$_dataContainer[$realm] = []; } return self::$_dataContainer[$realm][$variable] = $value; } } ?>