构造函数中的Codeigniter变量未定义

时间:2011-01-09 18:23:00

标签: php function codeigniter constructor globals

我正在使用CI的Auth Tank库来查询某些用户的记录。

变量$user_id = tank_auth->get_user_id();从会话中获取用户ID。我想将记录拉到user_id = $user_id

根据我的理解,构造函数可以在每次启动类时加载变量。有点像全局变量。所以我想我会在模型构造函数中设置$user_id,这样我就可以将它用于模型类中的多个函数。

class My_model extends Model {

    function My_model() 
    {
        parent::Model();
        $user_id = $this->tank_auth->get_user_id();     
    }

        function posts_read() //gets db records for the logged in user
    {       
        $this->db->where('user_id', $user_id);
        $query = $this->db->get('posts');
        return $query->result();
    }
}

接下来,我正在加载模型,在我的控制器中创建一个数组,并将数据发送到我的视图,在那里我有一个foreach循环。

测试时我得到了

  

消息:未定义的变量:user_id

在我的模特中。但是,如果我在$user_id函数中定义posts_read变量,它会工作,但我不想在每个需要它的函数中定义它。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:10)

可变范围问题。您应该创建类级变量,以便它可以在其他函数中使用,如下所示:

class My_model extends Model {
    private $user_id = null;

    function My_model() 
    {
        parent::Model();
        $this->user_id = $this->tank_auth->get_user_id();     
    }

        function posts_read() //gets db records for the logged in user
    {       
        $this->db->where('user_id', $this->user_id);
        $query = $this->db->get('posts');
        return $query->result();
    }
}

注意在类声明之后添加$user_id,后来与$this->user_id一起使用:)

答案 1 :(得分:5)

将其拉入全球范围

class My_model extends Model {

    $user_id = 0;

    function My_model() {
        parent::Model();
        $this->user_id = $this->tank_auth->get_user_id();     
    }

    function posts_read() //gets db records for the logged in user {       
        $this->db->where('user_id', $this->user_id);
        $query = $this->db->get('posts');
        return $query->result();
    }
}