如何在Codeigniter中实例化同一对象的多个实例?

时间:2011-12-05 19:32:48

标签: php oop codeigniter object instantiation

使用传统的OOP,我会(或者可以)创建一个代表User的模型/对象,其属性反映出来,即nameid,{{ 1}}等等。

然后我可以创建该对象的新实例并将其分配给变量,如果我循环遍历结果集,我可以为每个创建一个实例。使用codeigniter,这似乎是不可能的,如:

job title

实例化它,并将其放置在$this->load->model('User');

有没有办法以更传统的方式将模型用作对象?但是没有破解CI的做事方式?

我知道您可以使用$this->user将内容分配给不同的对象名称,但它不像简单地将实例分配给变量那样动态。

非常感谢任何有关此事的见解。

编辑:感谢答案的人,我认为我错过了工作" Codigniter Way"的重要部分,但我一直在寻找贡献的库,以及使用相同实例(分配给codeigniter命名空间)但在每次使用后清除实例变量的做法,似乎是一种很好的工作方式,可以消除我的预订。

再次 - 感谢您的帮助和答案。

4 个答案:

答案 0 :(得分:5)

您不必使用load()功能。您可以像往常一样使用require_oncenew 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++;
}