PHP自定义会话管理类
因此,我有一个用于管理PHP会话的类,下面是该类:PHP自定义会话管理类,php,session,static,try-catch,Php,Session,Static,Try Catch,因此,我有一个用于管理PHP会话的类,下面是该类: class SessionManagement { public static function sessionStarted() { if(session_id() == '') { return false; } else { return true; } } public static function sessionE
class SessionManagement {
public static function sessionStarted() {
if(session_id() == '') {
return false;
} else {
return true;
}
}
public static function sessionExists($session) {
if(sessionStarted() == false) {
session_start();
}
if(isset($_SESSION[$session])) {
return true;
} else {
return false;
}
}
public static function setSession($session, $value) {
if(sessionStarted() != true) {
session_start();
}
$_SESSION[$session] = $value;
if(sessionExists($session) == false) {
throw new Exception('Unable to Create Session');
}
}
public static function getSession($session) {
if(isset($_SESSION[$session])) {
return $_SESSION[$session];
} else {
throw new Exception('Session Does Not Exist');
}
}
}
现在试试这个
try {
SessionManagement::setSession('Foo', 'Bar');
echo SessionManagement::sessionStarted();
echo SessionManagement::getSession('Foo');
echo SessionManagement::sessionExists('Foo');
} catch(Exception $e) {
echo $e->getMessage();
}
……没有输出…我不确定我们在哪里打破……任何有用的眼睛都是非常感激的……/P>< P>不像其他的OO语言,比如C++,在你的类PHP中需要知道静态方法调用来自这个对象。对于实例化的类,可以通过
$this
,在您的情况下,可以通过self
实现静态方法:
class SessionManagement {
public static function sessionStarted() {
if(session_id() == '') {
return false;
} else {
return true;
}
}
public static function sessionExists($session) {
if(self::sessionStarted() == false) {
session_start();
}
if(isset($_SESSION[$session])) {
return true;
} else {
return false;
}
}
public static function setSession($session, $value) {
if(self::sessionStarted() != true) {
session_start();
}
$_SESSION[$session] = $value;
if(self::sessionExists($session) == false) {
throw new Exception('Unable to Create Session');
}
}
public static function getSession($session) {
if(isset($_SESSION[$session])) {
return $_SESSION[$session];
} else {
throw new Exception('Session Does Not Exist');
}
}
}
对
self::
所有内部调用的SessionManagement
静态方法应该可以解决您的问题。您所有的方法都是静态的,但您是在对象上下文中调用它们的。sessionStarted()
函数也不存在。您需要$this->sessionStarted()
或static::sessionStarted()
更新…仍然没有输出。有人吗?在现代php中,正确的方法是static::
,功能上几乎相同,不同的是,当扩展类static::overwrited\u方法时,
将调用新方法,而self::overwrited\u方法
仍将从代码所在的当前类调用该方法。在您认为self::
有意义的情况下,您可能希望只在方法上使用私有可见性。