php - CI_Model 中的 $db 在哪里?

标签 php codeigniter

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

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

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

但是对于 $CI_Model 我没有看到同样的事情。 “$this->db”在哪里被引用以及何时加载?

最佳答案

我还没有足够努力地研究代码,但是我已经使用codeigniter有一段时间了,我希望不要说错什么,但是事情并不像你猜的那样工作。您要查找的 $db 不在 CI_Model 父类(super class)中(也不在 CI_Controller 父类(super class)中),但它是在 Loader 类 (system/core/loader.php) 中声明的变量。

codeigniter 应用程序被设计为像一个巨大的“父类(super class)”一样工作,实际上所有库和模型等都是使用 $this 实例化的(通常在类的范围内使用),所以当您正在加载数据库库 - 您可以在模型中执行此操作,也可以在 Controller 中执行此操作(并且,如果您在自定义库中实例化主 $CI 类,也在那里) - 您实际上指的是变量 create在加载器类中,正好在 CI_Loader 类的数据库方法内的第 229 行(或多或少)。

我对 CI 的了解并不深,无法为您提供更多详细信息,但如果您查看一下 codeigniter.php 和 loader.php,您可以获得足够的见解来了解 CI 内部的工作原理。

如果您有其他问题或仍有不清楚的地方,请询问;)

关于php - CI_Model 中的 $db 在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243572/

相关文章:

php - Codeigniter:类别和子类别

php - JPEG 图像在 Android 和 IOS 后端 php webservice 中显示不同

PHP用户定义函数,(新人需要帮助)

javascript - Ajax调用失败

mysql - Codeigniter MySql 数据库连接问题

php - $this->db->group_by() 并添加数量

javascript - Ajax 文件上传 - 服务器端错误

php - 编码 HTML 实体但忽略 HTML 标签 - 在 PHP 中

codeigniter - CodeIgniter YouTube API库浏览器上传

php - 如何通过调用 codeigniter Controller 函数来更改配置项值?