PHP自定义会话管理类

时间:2013-02-06 17:27:48

标签: php session static try-catch

所以我有一个班级,我正在努力管理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();
}

...没有输出......我不确定我们在这里打破了什么...非常感谢任何有用的眼睛......

1 个答案:

答案 0 :(得分:1)

与其他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静态方法的所有内部调用应该可以解决您的问题。