我有 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/