1

我最近一直在从事一个项目,该项目是在另一位开发人员离开后交给我的(他是唯一一个在离开之前从事该项目的人)。该项目是用 CodeIgniter 编写的,并使用 MVC 框架。在做这个项目时,我发现了一些有趣的东西,或者至少是我以前从未见过的东西。模型加载到控制器后,对象被传递到视图中,使用...

$data['outcomes']                 = $this->id_conversion;

id_conversion 是控制器顶部加载的模型。我的问题是这与使用有什么不同吗

new Id_conversion();

代替上述。

感谢您提供任何帮助或任何能够指出我正确方向的人。

编辑。抱歉,在阅读了评论后,我发现我需要更多的代码才能使其有意义。

public function person($id)
{
    $this->authenticate->check_access(array('admin', 'rps'), 'home');
    $this->load->library('page_uri');
    $this->load->model('term');
    $this->load->model('user');
            $this->load->model('id_conversion');

    $selected_term = $this->page_uri->get_term();

    $current_term = $this->term->current_term_id();
    if (!isset($selected_term)) {
        $selected_term = $current_term;
    }

    $term = new Term();
    if (!empty($selected_term) && $selected_term !== '0') {
        $term = new Term($selected_term);
    }

    $user = new User($id);
    $plans = $user->plans_by_term($term);

    $data = array();
    $data['user']                 = $user;
    $data['site_url']             = site_url("reports/person");
    $data['current_term']                     = $this->term->current_term_id();
    $data['selected_term']                    = $selected_term;
    $data['terms']                = $this->term->sorted_term_list();
    $data['term']                 = $selected_term;
    $data['plans']                = $plans;
            $data['outcomes']                         = $this->id_conversion;

    $this->load->view('template/foundation', $data);
}

模型 id_conversion 加载

class Id_conversion extends MY_Model{

function __construct()
{
    parent::__construct();
}

/*
 * Input a primary or secondary outcome as defined
 * in the plan class and 
 */
public function id_outcomes($id)
{
    $sql = 'SELECT name
            FROM outcomes
            WHERE id ='. $id;

    $query = $this->db->query($sql);

    return $query->row_array();
}

}

4

2 回答 2

1

可能会给出相同的结果,但不确定。

如果$this->id_conversion是对模型类的引用,则该类可能已以不同的方式初始化。在 Codeigniter 中,您可以像这样初始化模型的实例:

$this->load->model('model_name', 'alias_name', $db_params);

如果该类Id_conversion不存在并且id_conversion实际上是一个别名,那么这当然是行不通的。

如果$db_params是不同的,那么这与只是说的有很大不同new Id_conversion();。另请注意,()如果您没有将任何内容传递给构造函数,则不需要。如前所述,它创建了另一个不必要的类实例。

当然,如果 的状态发生$this->id_conversion了变化,例如:

$this->id_conversion->property = 'value';

……那么就完全不一样了。

请注意,它$this->id_conversion也将在视图中可用,因此虽然将其显式传递给视图可能是一种好习惯,但这并不是绝对必要的。视图在与调用它的控制器方法相同的范围内运行。

除非您确定自己知道自己在做什么,否则最好坚持使用 Codeigniter 方式。

于 2013-08-08T21:04:34.727 回答
1

使用new将创建一个新对象。

Using$this->id_conversion将使用先前已在某个时间点创建并存储在该变量中的现有对象。

如果不查看更多代码,就完全不可能知道现有对象处于什么状态,因此我无法告诉您创建新对象与使用现有对象相比有何不同。我想程序有充分的理由已经创建了对象并为你存储了它,所以我猜它已经准备好使用了,但我不能从你给我们的内容中确定。

但是即使在现有对象处于完全原始状态并且创建一个新对象会提供相同功能的情况下,当一个对象已经存在时,您也会浪费系统资源来创建一个额外的对象。可以肯定的是,只有少量的浪费,但这一切都加起来了。

于 2013-08-08T21:08:01.543 回答