CodeIgniter - 使用“new”创建

时间:2012-07-21 20:54:38

标签: codeigniter

我对CodeIgniter有一个哲学问题,以及它的模型在将“new”用于实例时的作用。

在我看来,这个想法,就是你用来举例说使用一本书的模型

$this->load->model("book_model")

而不是

new book_model

我的意思是,因为你只加载book_model一次,你将只有一个book_model的实例,如果你想模拟多本书,你将在book_model中使用createNewBook函数,而不是通过使用“new”后的_construct函数。

这样看是不对的?我的意思是考虑我使用相同的book_model实例和一个函数“initiateBook”?我们应该考虑永远不要在CodeIgniter中使用“new”吗?

1 个答案:

答案 0 :(得分:3)

实际上,当您致电$this->load->model("book_model")时,CodeIgniter会为您完成工作,这意味着CodeIgniter的{​​{1}}有一个方法Loader class来实例化该模型您已作为参数传递,例如public function model(...)

取自book_model中的model function(位于Loader class

system/core

检查if (in_array($name, $this->_ci_models, TRUE)) { return; } 受保护的数组以查看所请求的模型是否已加载,然后加载_ci_models,如果未加载,则加载它,即(模型方法的最后一段)

returns

因此,您不需要使用$CI->$name = new $model(); // here $model is a variable which has the name of the requsted model $this->_ci_models[] = $name; // stores the instantiated model name in the _ci_models[] array return; // then returns 手动实例化它,一旦模型(同样适用于其他库或类)加载,您就可以在脚本中的任何位置访问/使用它。

由于new使用Singletonan answer on SO about singleton pattern)设计模式,因此您只有一个超级全局CodeIgniter对象(一个CodeIgniter实例)可用,并且它可以包含您的所有内容已加载或您将加载。

加载$CI模型,然后调用该模型的book_model方法

initiateBook()