【问题标题】:issue with static class property in phpphp中的静态类属性问题
【发布时间】:2014-08-27 17:52:09
【问题描述】:

我正在开发一个简单的匿名登录系统,我有一个 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();

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

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

【问题讨论】:

  • 构造函数是类中的函数,当您创建使用 new 的类的新实例时会自动调用这些函数。 php.net/manual/ru/oop4.constructor.php
  • 所以,我不能在静态类上使用构造函数——因为我从不创建类的实例?我直接这样设置属性值:private static $cookieLifeSpanInDays = 1825; 然后当我调用登录函数时,cookie 仍然没有设置。

标签: php oop static-class


【解决方案1】:

我已经解决了:

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

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多