使用传统的OOP,我会(或者可以)创建一个代表User
的模型/对象,其属性反映出来,即name
,id
,{{ 1}}等等。
然后我可以创建该对象的新实例并将其分配给变量,如果我循环遍历结果集,我可以为每个创建一个实例。使用codeigniter,这似乎是不可能的,如:
job title
实例化它,并将其放置在$this->load->model('User');
。
有没有办法以更传统的方式将模型用作对象?但是没有破解CI的做事方式?
我知道您可以使用$this->user
将内容分配给不同的对象名称,但它不像简单地将实例分配给变量那样动态。
非常感谢任何有关此事的见解。
编辑:感谢答案的人,我认为我错过了工作" Codigniter Way"的重要部分,但我一直在寻找贡献的库,以及使用相同实例(分配给codeigniter命名空间)但在每次使用后清除实例变量的做法,似乎是一种很好的工作方式,可以消除我的预订。
再次 - 感谢您的帮助和答案。
答案 0 :(得分:5)
您不必使用load()
功能。您可以像往常一样使用require_once
和new User()
。
使用load()
应仅适用于全局CI命名空间中的所需内容。正如您所看到的,如果您尝试将其用于所有事情,它会很快受到污染。
答案 1 :(得分:0)
您仍然可以像在正常情况下一样在codeigniter中实例化对象。
$user1 = new Users(); // Instantiate
$user2 = new Users();
$user1->property; // Using it
$user2->method()
unset($user1); // Unset it when done for good practice.
答案 2 :(得分:0)
是的,JustAnil和minboost所说的是正确的,但是,大多数CI开发人员如何编写代码的标准做法是使用以下语法
$this->mymodel->mymethod();
当您尝试这样写时,您是否发现了特定问题或问题?或者它与您习惯写作的风格有什么不同?请详细说明一个用例,“它不像简单地将实例分配给变量那样动态”:)
答案 3 :(得分:-2)
// 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++;
}