【发布时间】: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