我有一个类似于
的结构的用户类class User
{
private $_data, $_isLoggedIn;
public function __construct()
{
//Initialising variables
}
public function login()
{
//logs in the user and assigns the value true to $_isLoggedIn i.e $this->_isLoggedIn = true
}
public function isLoggedIn()
{
return $this->_isLoggedIn;
}
}
我希望能够做的是使用isLoggedIn
值来检查用户是否在另一个类中登录以检查用户是否已登录。所以我所做的就像这样
class Oranges
{
public function write()
{
$user = new User;
if($user->isLogedIn) echo 'Logged In';
}
}
但是每当我打电话给橘子课时,我都会失去_isLoggedIn
的价值。
如何在不使用我被告知不安全的会话的情况下检查用户是否已登录。
答案 0 :(得分:0)
您有几个选择。一种解决方案是在实例化时将用户对象存储在会话var中,可以在实例化时将其作为参数传递给Oranges对象。
答案 1 :(得分:0)
每次调用write()
方法时,都会实例化new User
,这是错误的一点。
您可以考虑保存User
,然后每次都使用相同的对象。
例如,保存到变量
class Oranges
{
protected $user;
public function __construct()
{
$this->user = new User;
}
public function write()
{
if($this->user->isLogedIn) echo 'Logged In';
}
}
或您可以考虑使用singleton
class User
{
//...
private static $instance;
//...
public static function getInstance()
{
if (is_null(self::$instance)) {
self::$instance = new User();
}
return self::$instance;
}
}
然后您可以在任何地方拨打User::getInstance()
以获取User
if (User::getInstance()->isLogedIn()) echo 'Logged In';