在我的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中执行此操作的正确方法吗?
答案 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");
除非你得到另一个班级的实例,否则你应该这样做。