CI_Model中的$ db在哪里?

时间:2011-06-05 14:39:42

标签: php codeigniter

我来自Java背景,现在我正在尝试学习PHP,我正在用CodeIgniter编写的一个Web项目。现在我正在尝试研究如何使用CI的模型。我很自然地对阅读框架代码非常好奇,以便更深入地了解我使用的工具是如何工作的。

我真的很困惑“$ this-> db”中的“$ db”来自扩展CI_Model的Model类来自哪里。我检查了CI_Model类本身,但它不存在。

在此之前,我已经阅读了CI_Controller的代码并以某种方式认为虽然$ this-> load->模型(....)不是一个实例变量($ this-> load)方法模型(..._),以某种方式“它在那里”,因为构造函数在构造函数中实例化了一个$ this-> load实例变量(在core /文件夹中找到的Loader类有一个模型(...)功能。

但对于$ CI_Model,我看不出同样的事情。引用“$ this-> db”的位置以及何时加载?

2 个答案:

答案 0 :(得分:3)

我没有研究过难以实现的代码,但是我已经使用了codeigniter一段时间,我希望不要说错了,但事情并没有像你猜到的那样有效。您正在寻找的$ db不在CI_Model超类中(也不在CI_Controller超类中),但它是在Loader类(system / core / loader.php)中声明的变量。

一个codeigniter应用程序被设计成像一个巨大的“超类”一样工作,实际上所有的库和模型等都使用$ this实例化(通常在类的范围内使用),所以当你'重新加载数据库库 - 您可以在模型中执行此操作,也可以在控制器中执行(如果您在自定义库中实现主$ CI类,也可以在那里执行) - 实际上您指的是变量创建在loader类中,恰好在CI_Loader类的数据库方法内的第229行(或多或少)。

我不太了解CI知识给你更好的细节,但是如果你看一下codeigniter.php和loader.php,你就可以获得足够的见解来理解CI内部的工作方式。

如果您有其他疑问或某些事情尚不清楚,请询问;)

答案 1 :(得分:2)

$ this-> db可能会在模型/控制器中加载:$ this-> load-> library('database')但很可能数据库库是自动加载的 - 检查:application / config / autoload。 PHP。对于代码,您应该像Damien所说的那样检查CI_Loader类。