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

问题描述 投票:0回答:4

使用传统的 OOP,我会(或者可以)创建一个代表

User
的模型/对象,并具有反映这一点的属性,即
name
id
job title
等。

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

$this->load->model('User');

实例化它,并将其放在

$this->user
处使用。

有没有办法以更传统的方式将模型用作对象?但如果不破坏 CI 的做事方式呢?

我知道您可以使用

$this->load->model('User', 'fubar')
将事物分配给不同的对象名称,但它并不像简单地将实例分配给变量那样动态。

非常感谢大家对此事的任何见解。

编辑:感谢大家的回答。我认为我错过了“CodeIgniter Way”工作的重要部分,但我刚刚浏览了一个贡献的库,以及使用相同实例(分配给 CodeIgniter 命名空间)的实践,但在之后清除了实例变量每次使用,似乎都是一种很好的工作方式,消除了我的保留。

再次感谢您的帮助和解答。

php oop codeigniter object instantiation
4个回答
5
投票

您不必使用

load()
功能。您可以像平常一样使用
require_once
new User()

仅应在全局 CI 命名空间中使用

load()
。正如您所看到的,如果您尝试将它用于所有用途,它很快就会被污染。


0
投票

您仍然可以像平常一样在 codeigniter 中实例化对象。

$user1 = new Users(); // Instantiate
$user2 = new Users();

$user1->property;     // Using it
$user2->method()

unset($user1);        // Unset it when done for good practice.

0
投票

是的,JustAnil 和 minboost 所说的是正确的,但是,大多数 CI 开发人员编写代码的标准做法是使用以下语法

$this->mymodel->mymethod(); 

当您尝试这样写作时,是否发现了特定的问题或问题?或者只是与您习惯的写作风格不同?请详细说明“它不像简单地将实例分配给变量那样动态”的用例:)


-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++;
}
© www.soinside.com 2019 - 2024. All rights reserved.