【问题标题】:Codeigniter variables from constructor are undefined来自构造函数的 Codeigniter 变量未定义
【发布时间】:2011-06-06 04:02:06
【问题描述】:

我正在使用 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

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

我在这里做错了什么?

【问题讨论】:

    标签: php function codeigniter constructor globals


    【解决方案1】:

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

    class My_model extends Model {
        private $user_id = null;
    
        function My_model() 
        {
            parent::Model();
            $this->user_id = $this->tank_auth->get_user_id();     
        }
    
        // gets db records for the logged in user
        function posts_read()   
        {       
            $this->db->where('user_id', $this->user_id);
            $query = $this->db->get('posts');
            return $query->result();
        }
    }
    

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

    【讨论】:

    【解决方案2】:

    将其拉入全局范围

    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();
        }
    }
    

    【讨论】:

    • @Cyber​​Junkie 与使用 NULL 的 Safraz 相同。我用一个实际值初始化它,因为没有用户将0 作为他的 id。 NULL0 都很好 IMO
    猜你喜欢
    • 2012-08-31
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多