使用传统的 OOP,我会(或者可以)创建一个代表
User
的模型/对象,并具有反映这一点的属性,即 name
、id
、job title
等。
然后我可以创建该对象的一个新实例并将其分配给一个变量,如果我循环遍历结果集,我可以为每个对象创建一个实例。对于 CodeIgniter,这似乎是不可能的,因为这样做:
$this->load->model('User');
实例化它,并将其放在
$this->user
处使用。
有没有办法以更传统的方式将模型用作对象?但如果不破坏 CI 的做事方式呢?
我知道您可以使用
$this->load->model('User', 'fubar')
将事物分配给不同的对象名称,但它并不像简单地将实例分配给变量那样动态。
非常感谢大家对此事的任何见解。
编辑:感谢大家的回答。我认为我错过了“CodeIgniter Way”工作的重要部分,但我刚刚浏览了一个贡献的库,以及使用相同实例(分配给 CodeIgniter 命名空间)的实践,但在之后清除了实例变量每次使用,似乎都是一种很好的工作方式,消除了我的保留。
再次感谢您的帮助和解答。
您不必使用
load()
功能。您可以像平常一样使用 require_once
和 new User()
。
仅应在全局 CI 命名空间中使用
load()
。正如您所看到的,如果您尝试将它用于所有用途,它很快就会被污染。
您仍然可以像平常一样在 codeigniter 中实例化对象。
$user1 = new Users(); // Instantiate
$user2 = new Users();
$user1->property; // Using it
$user2->method()
unset($user1); // Unset it when done for good practice.
是的,JustAnil 和 minboost 所说的是正确的,但是,大多数 CI 开发人员编写代码的标准做法是使用以下语法
$this->mymodel->mymethod();
当您尝试这样写作时,是否发现了特定的问题或问题?或者只是与您习惯的写作风格不同?请详细说明“它不像简单地将实例分配给变量那样动态”的用例:)
// User_model.php
public function get_users() {
$query = $this->db->get('mytable');
return $query->result();
}
// User_controller.php
public function show_users() {
$data['users'] = $this->User_model->get_users();
$this->load->view('show_users', $data);
}
// show_users.php (view file)
$x = 0;
foreach ($users as $user) {
$x = $user;
$x++;
}