php中的静态类属性问题

时间:2014-07-07 09:32:55

标签: php oop static-class

我正在开发一个简单的匿名登录系统,我有一个Session类,如下所示:

<?php

class Session
{
    private static $cookieLifeSpanInDays;

    public function __construct()
    {
        self::$cookieLifeSpanInDays = 1825;
    }

    public static function loginUser()
    {
        if (!Session::isLoggedIn())
        {
            // Login User
            $session_id = Session::newSessionId();
            $name = Session::newUserName($session_id);
            if (empty($name))
                throw new Exception('Failed to generate a unique user name. Try again later.');
            DB::insert('users', array(
                'name'          => $name,
                'session_id'    => $session_id,
                'last_login'    => time()
            ));
            setcookie("sessionId", $session_id, time() + (self::$cookieLifeSpanInDays * 86400), '/', $_SERVER['HTTP_HOST']);
            $_SESSION['isLoggedIn'] = true;

            var_dump(self::$cookieLifeSpanInDays);
            var_dump($_COOKIE);
            exit();
        }

        // Defaults
        return true;
    }
}

当我这样打电话给你时:Session::loginUser();

var_dumps()函数中的loginUser如下所示:

enter image description here

因此,我的登录功能被破坏(没有设置cookie),因为类self::$cookieLifeSpanInDays上的静态属性为空。我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

我已修好它:

<?php

class Session
{
    private static $cookieLifeSpanInDays = 1825;

    public static function loginUser()
    {
        if (!Session::isLoggedIn())
        {
            // Login User
            $session_id = Session::newSessionId();
            $name = Session::newUserName($session_id);
            if (empty($name))
                throw new Exception('Failed to generate a unique user name. Try again later.');
            DB::insert('users', array(
                'name'          => $name,
                'session_id'    => $session_id,
                'last_login'    => time()
            ));
            setcookie("sessionId", $session_id, time() + (self::$cookieLifeSpanInDays * 86400));
            $_SESSION['isLoggedIn'] = true;

            var_dump(self::$cookieLifeSpanInDays);
            var_dump($_COOKIE);
            exit();
        }

        // Defaults
        return true;
    }
}