为登录系统创建数组外对象php codeigniter

为登录系统创建数组外对象php codeigniter,php,codeigniter,getter-setter,magic-methods,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->userda

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

示例模型

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(){......}
但是我觉得这不太合适!!它又丑又不干

那么我应该使用魔法集吗?或者我可以做一些类似于
$this=$this->session->userdata('user')

对我来说,目标是因为这个模型在我的自动加载上,我希望能够使用simple
$id=$user->id
if($user->id)回显“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()”

我想那是因为你在这个->会话中获得了$capture!那我怎么才能解决这个问题

为什么不干脆

if($this->session->userdata('user')){
    $this->data = $this->session->userdata('user');
}
。。。然后,您可以访问
$user->data->id
。此外,如果您在用户数据中添加更多属性,这种方法在将来会更加灵活。

我的老板不喜欢:(…他想要$user->id!我想我可以按照您的建议使用,并编写一个u get从数据中获取它:D!foreach($u as$k=>$v)$this->$k=$v;类似的东西可能有用吗?