简体   繁体   English

PHP中的静态类属性的问题

[英]issue with static class property in php

I am working on a simple anonymous login system and I have a Session class which looks like this: 我正在使用一个简单的匿名登录系统,并且有一个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;
    }
}

When I call the class like this: Session::loginUser(); 当我像这样调用该类时: Session::loginUser();

The var_dumps() in the loginUser function looks like this: loginUser函数中的var_dumps()如下所示:

在此处输入图片说明

So, my login function is broken (no cookie is getting set) because the static property on class self::$cookieLifeSpanInDays is null. 因此,我的登录功能已损坏(未设置cookie),因为类self::$cookieLifeSpanInDays上的静态属性为null。 What am I doing wrong here? 我在这里做错了什么?

I've fixed it: 我已经解决了:

<?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;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM