如何在类之间传递登录值?

时间:2018-04-26 02:21:02

标签: php class login

我有一个类似于

的结构的用户类
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的价值。

如何在不使用我被告知不安全的会话的情况下检查用户是否已登录。

2 个答案:

答案 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';