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

因此,我有一个用于管理PHP会话的类,下面是该类:

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::
有意义的情况下,您可能希望只在方法上使用私有可见性。