从数组php codeigniter创建一个对象用于登录系统

时间:2013-04-10 02:21:53

标签: php codeigniter getter-setter magic-methods

我有一个简单的问题,我正在创建一个简单的登录系统,我想在成功登录后将用户信息分配到模型类中,

示例模型

class user extends CI_Model {
    public $id=FALSE,$name,$role;

    public function __construct(){
        parent::__construct();

    //load user information
        if($this->session->userdata('user')){
            $u=$this->session->userdata('user');
            $this->id=$u->id;
            $this->role=$u->role;
            $this->name=$u->name;
        }

    }
    function login(){......}

但这对我来说不合适!它的丑陋和不干燥。

我应该使用magic _ set, _get?或者我可以做$this=$this->session->userdata('user');

之类的事情

我的目标是因为这个模型在我的Autoload上,我希望能够使用简单的$id=$user->id或其他任何模型/控制器获取用户信息 if($user->id)echo"hello".$user->name;

现在,如果我这样做。

    private $data;

    public function __construct(){
        parent::__construct();
        $this->data = (object) $this->session->userdata('user');
    }
    public function __get($name) {
    if(isset($this->data->$name)){
        return $this->data->$name;
        }
    }

这将在非对象“

上创建一个错误”调用成员函数userdata()

我认为那是因为__get捕获$ this->会话!那么我怎么能解决这个问题呢?!

1 个答案:

答案 0 :(得分:1)

为什么不简单......

if($this->session->userdata('user')){
    $this->data = $this->session->userdata('user');
}

...然后您可以访问$user->data->id。如果您为用户数据添加更多属性,此方法将来也会更加灵活。