该函数应该是实例级还是类级? ...以及如何使它在codeigniter中工作

时间:2009-11-18 03:17:07

标签: php codeigniter

在我的codeigniter项目中,我有

<?php
class User_model extends Model {
    function user_model()
    {
        parent::Model();
    }

    // should we use instance method?
    function get_total_users_count(){
        $results = $this->db->query("SELECT * FROM bhr_users GROUP BY userid");
        if($results){
            return $results->num_rows();
        }
        return 0;
    }

    // or class method?
    public static function get_total_users_count(){
        $obj =& get_instance();
        $results = $obj->db->query("SELECT * FROM bhr_users GROUP BY userid");
        if($results){
            return $results->num_rows();
        }
        return 0;
    }
}
?>

我觉得这应该是一个类级方法,因为它可以在多个用户上运行。你同意吗? get_instance是在codeigniter中执行此操作的正确方法吗?

3 个答案:

答案 0 :(得分:1)

老实说,我认为没有一种正确的方法可以解决这个问题。我会说实例方法是最常用的方法,但这并不是说它是对还是错。

CodeIgniter和其他一些框架之间的一个重要区别是,模型可以是您想要的任何模型。根据CI手册“模型代表您的数据结构”。它表示模型将“通常”与您的数据库进行交互。

我喜欢CodeIgniter用于模型的松散定义,因为它允许我创建用于处理任何数据集的模型。想要使用RSS提要作为数据源吗?你可以使用一个模型。想从Web服务中提取数据?你可以使用一个模型。您可以自由定义如何使用模型。

我说最重要的是一致性。选择一种方法并在整个项目中始终如一地使用它。如果您正在与项目上的其他开发人员合作,那么使用实例方法可能会更好。这样他们就不会对将您网站上的工作代码与CodeIgniter文档进行比较时发生的事情感到困惑。当然,这取决于你工作的开发人员的技能水平。

答案 1 :(得分:1)

要直接回答您的问题 - get_instance()函数调用是在静态函数中执行您尝试执行的操作的正确方法。

答案 2 :(得分:0)

您应该使用

$results = $this->db->query("SELECT * FROM bhr_users GROUP BY userid");

除非你得到另一个班级的实例,否则你应该这样做。